我有一个JPanel
,显示一组JLabels
,这些都是在方法内动态计算和打印的。标签的内容保存在ArrayList
在另一种方法中,通过动作监听器将更多对象添加到ArrayList
中:
class listener implements ActionListener{
public void actionPerformed(ActionEvent a){
String name = myTextArea.getText();
Object temp = new Object(name);
myList.add(temp);
panel = createPanel();
panel.revalidate();
panel.repaint();
card.show(contentsPanel, "panel");
}
}
createPanel()
是获取ArrayList
并显示它的原因。
这当然是一种抽象,但这个想法仍然存在。
当我尝试使用.revalidate()
和.repaint()
更新面板的内容和外观时,会出现此问题。我知道对象是在我测试过的ArrayList中,但是面板没有正确地重绘自己。
有什么建议吗?如有必要,我可以提供其他信息或代码。
根据要求,我将包含代码。由于尺寸的原因,我无法附上整件事,但这里引用的是方法:
private JPanel createPanel() {
panel = new JPanel();
panel.setLayout(new GridLayout(myList.size(), 1));
panel.setBackground(new Color(250, 250, 250));
for(int i = 0; i < myList.size(); i++){
JLabel temp = new JLabel(myList.get(i).toString());
panel.add(temp);
}
return panel;
}
答案 0 :(得分:1)
您似乎没有在任何地方添加新创建JPanel
。
(看起来您在panel
和createPanel
内分配了字段actionPerformed
。还有一个名为Object
的类 - 使用已使用的任何名称java.lang
是一个坏主意。)