我有一个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;
}
最佳答案
您似乎没有在任何地方添加新创建的 JPanel
。
(看起来您正在 createPanel
和 actionPerformed
中分配字段 panel
。并且还有一个名为 Object
的类 - 使用 java.lang
已使用的任何名称都是一个坏主意。)
关于java - 通过ActionListener更新JPanel内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8299529/