Java 通过ActionListener更新JPanel内容
我有一个Java 通过ActionListener更新JPanel内容,java,swing,jpanel,actionlistener,Java,Swing,Jpanel,Actionlistener,我有一个JPanel,它显示一组jlabel,它们都是在方法内部动态计算和打印的。标签的内容保存在ArrayList 在另一种方法中,通过操作侦听器将更多对象添加到ArrayList,如下所示: class listener implements ActionListener{ public void actionPerformed(ActionEvent a){ String name = myTextArea.getText();
JPanel
,它显示一组jlabel
,它们都是在方法内部动态计算和打印的。标签的内容保存在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;
}
private JPanel createPanel(){
panel=新的JPanel();
panel.setLayout(新的GridLayout(myList.size(),1));
面板.立根背景(新颜色(250250250));
对于(int i=0;i
您似乎没有在任何地方添加新创建的JPanel
(看起来您在
createPanel
和actionPerformed
中分配字段panel
。还有一个名为Object
的类-使用java.lang
已经使用的任何名称都是一个坏主意。)您似乎没有在任何地方添加新创建的JPanel
(看起来您在
createPanel
和actionPerformed
中都分配了panel
字段,并且还有一个名为Object
的类-使用java.lang
已经使用过的任何名称是个坏主意。)plz提供了关于代码的附加信息。。也许,我可以复制一个正在运行的副本粘贴并运行并查看..您没有将面板添加到正在显示的代码段中的父组件。您正在创建一个新面板,而不是替换旧面板。首先不应重新创建它。引用的“面板”是类对象。据我所知,它应该提到这一点。我更新了问题以包含创建面板的方法。更改引用不会更新GUI上显示的面板。您仍然需要将面板添加到GUI中,正如两次建议的那样。或者,另一种方法是从现有配电盘中删除所有零部件,然后将新零部件添加到配电盘中。然后,您不必将面板添加回GUI。plz提供额外的代码信息。。也许,我可以复制一个正在运行的副本粘贴并运行并查看..您没有将面板添加到正在显示的代码段中的父组件。您正在创建一个新面板,而不是替换旧面板。首先不应重新创建它。引用的“面板”是类对象。据我所知,它应该提到这一点。我更新了问题以包含创建面板的方法。更改引用不会更新GUI上显示的面板。您仍然需要将面板添加到GUI中,正如两次建议的那样。或者,另一种方法是从现有配电盘中删除所有零部件,然后将新零部件添加到配电盘中。然后你就不必把面板添加回GUI了,我为这个例子更改了变量的名称,因为它们在上下文中没有意义。但是这个解决方案很有效,谢谢。我更改了示例中变量的名称,因为它们在上下文中没有意义。但是这个解决方案是有效的,谢谢。