在JPanel中动态添加组件
问题描述:
如何在jpanel中动态添加组件? 我有添加按钮,当我点击按钮组件应该被添加到JPanel。在JPanel中动态添加组件
我的问题是,当我点击添加按钮时,添加一个文本框和按钮jpanel用户可以点击添加按钮任意次数根据我必须将它们添加到jpanel。我已经将scrollerpane添加到我的jpanel,并将jpanel布局管理器设置为null。
答
正如你总是这样,但你必须调用:
panel.revalidate();
当你完成,因为容器已经实现。
答
使用的ActionListener
,您可以使用匿名类是这样的:
JPanel myJPanel = new JPanel();
...
b = new Button("Add Component");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JLabel someLabel = new JLabel("Some new Label");
myJPanel.add(someLabel);
myJPanel.revalidate();
}
});
+0
如果已经显示容器,则必须在添加组件后重新验证容器(myJPanel)。 – 2010-08-30 10:30:57
事实上(虽然我不认为'repaint'实际上是必要的)。查看java.awt.Container.add'的API文档。 – 2010-08-30 11:04:32
在我一直认为两种方法总是一起使用之前,因为我在许多例子中都看到了它。 只是自己试了一下,确实,重新验证似乎够了!感谢你的建议,你是对的。 – crusam 2010-08-30 12:10:12
在这个简单的“添加”按钮的情况下,您通常不需要使用repaint()。然而,尝试一个简单的“删除”按钮的情况下,它不会工作。在这种情况下,您确实需要使用repaint()。我的一般规则是先用revalidate()尝试,如果不起作用,则添加一个repaint(); – camickr 2010-08-30 15:33:36