Композитный узор на качелях - PullRequest
2 голосов
/ 14 октября 2010

Это в основном архитектурный вопрос.

Я хочу реализовать составной шаблон в обработке компонентов Swing;то есть я хочу объединить несколько компонентов с их слушателями и логикой за одним компонентом для упрощения обработки.

Рассмотрим, например, простой каталогный браузер;скажем, JTree в JScrollPane с некоторой логикой, которая обрабатывает заполнение имен файлов, когда пользователь расширяет узлы JTree.Как бы вы это реализовали?

Вы расширяете JScrollPane и добавляете JTree и т. Д. В конструктор, а затем ваше приложение работает с классом JScrollPaneExtended?Или вы расширяете, скажем, JPanel или JComponent?Или вы соединяете все эти классы вместе в методе, который вы вызываете при заполнении JFrame?Или что-то другое?И почему?

Я в основном ищу приблизительное руководство по тому, что используют другие;Очевидно, я хотел бы иметь дело с какой-то формой JComponent для более легкой обработки при создании GUI, однако почему-то неуместно расширять самый верхний компонент (в этом примере JScrollPane) просто для того, чтобы было где-то поместить клейкий код.

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

Если вам не нужен делегат пользовательского интерфейса, расширение JComponent равно отлично ; если вы это сделаете, Как написать пользовательский компонент Swing - хорошее начало. В конкретном случае древовидной таблицы вы можете посмотреть org.netbeans.swing.outline, как обсуждалось в этом ответе .

1 голос
/ 14 октября 2010

Я сделал именно это для проприетарного свингового приложения, использующего отдельную и параллельную иерархию классов, с одним «компонентным» классом, охватывающим один или несколько JComponent с.Мне нужен базовый класс, чтобы делать много общих вещей (например, задавать свойства из файла XML), поэтому расширение JComponent не является опцией.

Для простых виджетов, таких как текстовое поле и кнопка, мой класс компонентов просто содержитодин виджетДля всего, что может прокручиваться (таблица, список, панель), мой компонент имеет JSrollPane поверх функционального виджета.У меня также есть «групповой» компонент, который работает с группой флажков или переключателей.

Требуются некоторые усилия для настройки, но как только у вас есть базовые возможности, очень легко добавлять новые виджеты.

...