Нельзя ли добавить компонент Swing в несколько контейнеров? - PullRequest
26 голосов
/ 07 января 2011

Я пытаюсь (тестирую что-то еще) добавить одну ссылку JButton в две JPanels, чтобы проверить ее, и она исчезает с первой панели, к которой она была добавлена!

Итак, нельзя ли добавить компонент Swing в несколько контейнеров?

Заранее спасибо.

Ответы [ 4 ]

47 голосов
/ 07 января 2011

С: http://download.oracle.com/javase/tutorial/uiswing/components/toplevel.html:

Каждый компонент графического интерфейса может содержаться только один раз.Если компонент уже находится в контейнере, и вы пытаетесь добавить его в другой контейнер, компонент будет удален из первого контейнера, а затем добавлен во второй.

6 голосов
/ 07 января 2011

Как вы обнаружили, вы не можете поделиться компонентами.Однако есть и другие подходы, которые вы можете использовать.

В случае JButton вы можете поделиться действием:

JButton button1 = новый JButton (someAction);JButton button2 = новый JButton (someAction);

Прочтите раздел из учебника Swing по Как использовать Actions для получения дополнительной информации.

В других случаях вы можетеподелиться моделью:

DefaultTableModel model = new DefaultTableModel( ... );
JTable table1 = new JTable( model );
JTable table2 = new JTable( model );

Решение зависит от ваших требований.

4 голосов
/ 07 января 2011

Решено.

Проверка в разделе UI-Swing Учебника Java, говорится:

Каждый компонент GUI может содержаться только один раз.Если компонент уже находится в контейнере, и вы пытаетесь добавить его в другой контейнер, компонент будет удален из первого контейнера, а затем добавлен во второй.
1 голос
/ 07 января 2011

Я не думаю, что это возможно. Что вы можете сделать, так это иметь несколько компонентов, совместно использующих один и тот же обработчик событий. Так что в основном, в вашем случае, объявите две кнопки и используйте один и тот же метод обработчика событий.

...