如何在jpanel中動態添加組件? 我有添加按鈕,當我點擊按鈕組件應該被添加到JPanel。在JPanel中動態添加組件
我的問題是,當我點擊添加按鈕時,添加一個文本框和按鈕jpanel用戶可以點擊添加按鈕任意次數根據我必須將它們添加到jpanel。我已經將scrollerpane添加到我的jpanel,並將jpanel佈局管理器設置爲null。
如何在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();
}
});
如果已經顯示容器,則必須在添加組件後重新驗證容器(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