2010-08-30 6 views
3

Как я могу динамически добавлять компоненты в jpanel? У меня есть кнопка добавления, когда я нажимаю кнопку, компоненты должны быть добавлены в JPanel.динамически добавляет компоненты в JPanel

Мой вопрос в том, что добавление текстового поля и кнопки в jpanel, когда я нажимаю кнопку добавления, может нажимать кнопку добавления любое количество раз в соответствии с тем, что я должен добавить их в jpanel. я добавил к scrollerpane в jpanel, а менеджер макета jpanel установлен в null.

ответ

5

Так же, как вы всегда, за исключением того, что вы должны вызвать:

panel.revalidate(); 

, когда вы сделали, так как контейнер уже реализован.

+1

Действительно (хотя я не думаю, что 'repaint' действительно необходимо). См. Документы API для 'java.awt.Container.add'. –

+0

Прежде, чем я всегда думал, что оба метода всегда используются вместе, так как я видел это так во многих примерах. Просто попробовал сам, и действительно, повторная аттестация кажется достаточно! Благодарю вас за этот совет, вы правы. – crusam

+4

В этом простом случае «добавления» кнопки вам вообще не понадобится использовать repaint(). Однако попробуйте простой случай «удаления» кнопки, и это не сработает. В этом случае вам нужно использовать repaint(). Мое общее правило - сначала попробовать с revalidate(), если он не работает, добавьте repaint(); – camickr

4

Используйте 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), если контейнер уже был отображен. –

Смежные вопросы