我在一个扩展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。有人可以帮忙吗?
非常感谢。
答案 0 :(得分:7)
当您从可见的GUI动态添加/删除组件时,您需要执行以下操作:
panel.add(...);
panel.revalidate();
panel.repaint();
如果您需要更多帮助,请发布展示问题的SSCCE。
答案 1 :(得分:2)
您需要重新布局组件 - 您的新面板已添加,但大小为0x0像素。添加面板后,在组件上调用layout(true)
。
如果组件中没有布局管理器,则必须在将添加的面板添加到组件后手动设置其位置和大小。