Панель с вкладками, в которой несколько раз одна и та же панель

#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:

Ошибка: 4176095 — Уточнение, что никакие 2 вкладки в JTabbedPane не могут иметь один и тот же компонент

Есть предлагаемое исправление, которое, однако, не было включено.

Ответ №4:

Если вы хотите добиться этого. Вы можете выполнить следующие действия — Добавить список вкладок — Всякий раз, когда выбрана вкладка, вы можете добавить компоненты, которые должны отображаться на выбранной панели вкладок, и показать ее. (т. Е. Всякий раз, когда отображается tabpanel, мы собираемся сбросить родительские данные компонентов)

Комментарии:

1. Для меня работает идеально, просто и быстро.

Ответ №5:

Да, любой компонент swing может быть добавлен только в один контейнер.

Ответ №6:

На каждой вкладке у вас должны быть отдельные компоненты, используя прослушиватели, вы можете манипулировать свойствами этих компонентов.

Чтобы решить подобную проблему, вам следует ознакомиться с шаблоном проектирования MVC,