Java JComboBox重绘错误

时间:2014-06-12 14:18:38

标签: java jpanel actionlistener paint jcombobox

所以我在我的新程序中使用JComboBox,但出于某种原因,每次选择某些内容时它都重新绘制。我不希望它在选择某些内容时重新绘制整个程序,只需指定框。请参阅下面的代码。 这里的第一部分来自包含面板的类。 首先是JComboBox的声明以及它们在选择后编辑的标签:

private JComboBox crewview = new JComboBox(SpaceGame.stuffselector);
private JComboBox resourceview = new JComboBox(SpaceGame.stuffselector1);
private JLabel crewmember, crewmember1, crewmember2;
private JLabel resourcev, resourcev1, resourcev2;

其中,stuff选择器是数字1到10的数组

我的绘画方法包含这些,因为它不起作用,除非我在这里有这些:

    resourceview.setLocation(400,80);
    resourcev.setLocation(455,85);
    resourcev1.setLocation(455,95);
    resourcev2.setLocation(455,105);

    crewview.setLocation(400, 20);
    crewmember.setLocation(455,25);
    crewmember1.setLocation(455,35);
    crewmember2.setLocation(455,45);

以下是我的动作听众:

    private  class crewviewListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        lifeForm temp = SpaceGame.playership.getCrewat(crewview.getSelectedIndex());
        crewmember.setText("Name: " + temp.getName()); //set the text to the crew member
        crewmember1.setText("Race: " + temp.getRace()); 
        crewmember2.setText("Worth: " + temp.getWorth());
    }
}
private class resourceviewListener implements ActionListener{
    public void actionPerformed(ActionEvent e1){
        Resource temp1 = SpaceGame.playership.getResourceat(resourceview.getSelectedIndex());
        resourcev.setText("Name: " + temp1.getName()); //set the text to the crew member
        resourcev1.setText("Worth: " + temp1.getWorth()); 
        resourcev2.setText("Amount: " + temp1.getAmount());
    }
}

因此,您可能会告诉您正在阅读代码,我试图让它只在选中框中的内容时更新JLables,而不是重绘所有内容。

1 个答案:

答案 0 :(得分:1)

默认情况下,JLabel是非透明的。这意味着每当您更改标签中的文本时,标签的背景也必须重新绘制。因此,包含标签的面板也将重新粉刷。

Swing通常会确定要重新绘制的面板的裁剪区域。也就是说,包含3个标签的矩形区域将被重新绘制,而不是整个面板。

如果您需要更多帮助,请发布展示问题的SSCCE