如何在ActionListener中添加Swing组件?

时间:2011-05-23 03:35:33

标签: java swing actionlistener

我在一个扩展JFrame的类中有一个名为newMI的JMenuItem。我想在单击JMenuItem时将Swing组件添加到我的JFrame中。出于测试目的,我尝试添加JPanel并将JPanel的背景颜色设置为红色。

这是我的ActionListener:

newMI.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
        JPanel p = new JPanel();
        p.setBackground(Color.red);
        add(p);
   }
}

然而这不起作用。如果我在其他Swing组件的初始化期间将它添加到JFrame,我可以更改JPanel的背景颜色。但我无法直接在ActionListener内部将Swing组件添加到JFrame。有人可以帮忙吗?

非常感谢。

2 个答案:

答案 0 :(得分:7)

当您从可见的GUI动态添加/删除组件时,您需要执行以下操作:

panel.add(...);
panel.revalidate();
panel.repaint();

如果您需要更多帮助,请发布展示问题的SSCCE

答案 1 :(得分:2)

您需要重新布局组件 - 您的新面板已添加,但大小为0x0像素。添加面板后,在组件上调用layout(true)

如果组件中没有布局管理器,则必须在将添加的面板添加到组件后手动设置其位置和大小。