通过ActionListener更新JPanel内容

时间:2011-11-28 17:08:28

标签: 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;       
}   

1 个答案:

答案 0 :(得分:1)

您似乎没有在任何地方添加新创建JPanel

(看起来您在panelcreatePanel内分配了字段actionPerformed。还有一个名为Object的类 - 使用已使用的任何名称java.lang是一个坏主意。)