所以我在我的新程序中使用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,而不是重绘所有内容。
答案 0 :(得分:1)
默认情况下,JLabel是非透明的。这意味着每当您更改标签中的文本时,标签的背景也必须重新绘制。因此,包含标签的面板也将重新粉刷。
Swing通常会确定要重新绘制的面板的裁剪区域。也就是说,包含3个标签的矩形区域将被重新绘制,而不是整个面板。
如果您需要更多帮助,请发布展示问题的SSCCE。