我有一个JPanel
,它显示一组JLabels
,它们都是在方法内部飞行计算和打印的。标签的内容在一个ArrayList
通过ActionListener更新JPanel内容
保持在另一种方法更目的是通过一个动作侦听器添加到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;
}
PLZ提供的附加信息的代码..也许,一个正在运行的副本,我可以复制粘贴并运行并看到.. – bragboy
您不是将面板添加到您显示的代码段中的父组件。 –
您正在创建一个新面板,而不是替换旧面板。你不应该重新创建它。 – gigadot