#java #swing
#java #swing
Вопрос:
У меня есть три вкладки, первая содержит компонент, вторая — другой компонент, а третья содержит оба компонента с первой и второй вкладки. На моей третьей вкладке оба компонента не отображаются. Должен ли я создать клон моего первого и второго компонента, чтобы он был на третьей вкладке? Что, если некоторые свойства моих компонентов изменятся?
Ответ №1:
Как упоминали другие, Swing JComponent
не может быть добавлен более чем к одному другому JComponent
(его родительскому элементу).
Если вы хотите поделиться содержимым компонентов, то, как правило, у вас есть простой вариант: поскольку компоненты Swing основаны на MVC, все они имеют модель, которой вы можете поделиться с несколькими JComponent
пользователями.
Например, JTextComponent
( JTextField
и JTextArea
являются JTextComponent
s) имеет Document
в качестве своей модели, этим Document
можно поделиться, как показано в следующем фрагменте:
JTextField field1 = new JTextField();
JTextField field2 = new JTextField();
field2.setDocument(field1.getDocument());
Теперь, если вы хотите синхронизировать другие свойства (например, количество столбцов JTextField
), вам придется использовать PropertyChangeListener
, как кто-то другой предложил.
Ответ №2:
У компонента Swing одновременно может быть только один родительский элемент. Поэтому, если вы попытаетесь добавить экземпляр компонента в несколько контейнеров, это не сработает.
Таким образом, вместо этого вам нужно создать экземпляр компонентов для каждого контейнера, в который вы хотели бы его добавить.
Ответ №3:
На нескольких вкладках не может быть одного и того же компонента. Для этого есть ошибка в базе данных Sun:
Есть предлагаемое исправление, которое, однако, не было включено.
Ответ №4:
Если вы хотите добиться этого. Вы можете выполнить следующие действия — Добавить список вкладок — Всякий раз, когда выбрана вкладка, вы можете добавить компоненты, которые должны отображаться на выбранной панели вкладок, и показать ее. (т. Е. Всякий раз, когда отображается tabpanel, мы собираемся сбросить родительские данные компонентов)
Комментарии:
1. Для меня работает идеально, просто и быстро.
Ответ №5:
Да, любой компонент swing может быть добавлен только в один контейнер.
Ответ №6:
На каждой вкладке у вас должны быть отдельные компоненты, используя прослушиватели, вы можете манипулировать свойствами этих компонентов.
Чтобы решить подобную проблему, вам следует ознакомиться с шаблоном проектирования MVC,