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了,我为这个例子更改了变量的名称,因为它们在上下文中没有意义。但是这个解决方案很有效,谢谢。我更改了示例中变量的名称,因为它们在上下文中没有意义。但是这个解决方案是有效的,谢谢。