java - 通过ActionListener更新JPanel内容

标签 java swing jpanel actionlistener

我有一个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

(看起来您正在 createPanelactionPerformed 中分配字段 panel。并且还有一个名为 Object 的类 - 使用 java.lang 已使用的任何名称都是一个坏主意。)

关于java - 通过ActionListener更新JPanel内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8299529/

相关文章:

java - Android 中的上下文菜单

java - 我应该使用哪个 WindowBuilder Swing 小部件来显示 System.out "console"?

java - 在航点上创建按钮

java - JPanel 不显示背景图像

java - 如何在jpanel上使用等待(长时间超时)

java - Jenkins 无法在 Tomcat 9 上运行

java - Jackson - 忽略具有特定名称的属性

Java 请求文件、发送文件(Client-server)

java - 按下空格键时打印文本

java - 将 jpanel 添加到 jframe.netbeans 中