在JPanel中动态添加组件

在JPanel中动态添加组件

问题描述:

如何在jpanel中动态添加组件? 我有添加按钮,当我点击按钮组件应该被添加到JPanel。在JPanel中动态添加组件

我的问题是,当我点击添加按钮时,添加一个文本框和按钮jpanel用户可以点击添加按钮任意次数根据我必须将它们添加到jpanel。我已经将scrollerpane添加到我的jpanel,并将jpanel布局管理器设置为null。

正如你总是这样,但你必须调用:

panel.revalidate(); 

当你完成,因为容器已经实现。

+1

事实上(虽然我不认为'repaint'实际上是必要的)。查看java.awt.Container.add'的API文档。 – 2010-08-30 11:04:32

+0

在我一直认为两种方法总是一起使用之前,因为我在许多例子中都看到了它。 只是自己试了一下,确实,重新验证似乎够了!感谢你的建议,你是对的。 – crusam 2010-08-30 12:10:12

+4

在这个简单的“添加”按钮的情况下,您通常不需要使用repaint()。然而,尝试一个简单的“删除”按钮的情况下,它不会工作。在这种情况下,您确实需要使用repaint()。我的一般规则是先用revalidate()尝试,如果不起作用,则添加一个repaint(); – camickr 2010-08-30 15:33:36

使用的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