Шаблон проектирования для управления окнами в приложении Java Swing

9

Я только начал создавать свое самое первое маленькое приложение на Java Swing. Когда программа открывается, она вызывает одно простое окно с меткой и парой кнопок. Нажатие одной из этих кнопок должно стереть экран приветствия и заменить его совершенно другой панелью.

Я не уверен, что лучший способ создать эту функциональность. Одним из способов было бы передать мои JFrameаргументы ... практически всем другим компонентам, но мне это кажется хакерским. Или есть сделать каждую панель двойной как слушатель действия, но это тоже не кажется правильным.

Есть ли шаблон дизайна, который я должен применить здесь? «Заменить содержимое главного и единственного окна» должно быть достаточно распространенной операцией. Было бы достаточно названия для шаблона; Я могу использовать Google самостоятельно оттуда. (Я бы не сказал нет более длинному объяснению.)

попса
источник
Это вопрос о реальных методах программирования, и вы, вероятно, получите гораздо больше ответов о переполнении стека.
Алекс Фейнман

Ответы:

6

При создании приложений Swing я обычно основываюсь на шаблоне посредника. В этом паттерне класс Mediator (обычно основной JFrame) обрабатывает различные части GUI (обычно JPanels, JMenus ...) и заботится о связи между ними.

Например, если событие произошло в JPanel1, JPanel1 уведомляет посредника (JFrame). JFrame затем предпринимает действия, изменяя JPanel2.

К вашему сведению: все мои проекты были приложениями GUI для небольших и средних компаний, поэтому я не уверен, что эти шаблоны хорошо масштабируются. Но если бы вы могли спроектировать адекватную архитектуру, шаблон Mediator мог бы стать прочной основой.

HH
источник
4

Вы можете иметь основной метод отображения JDialog. Когда диалог закрыт, основной JFrame создается и отображается.

JDialog предоставляет вам простые в использовании статические методы, которые отображают диалоговое окно с пользовательским содержимым и кнопками и возвращают код нажатой кнопки. Протестировав это значение, ваш основной метод может принять решение либо отобразить основной кадр, либо выйти (или что-либо еще). Пожалуйста, прочитайте Javadoc.

В отличие от некоторых старых структур пользовательского интерфейса, приложение Swing не привязано к конкретному фрейму или окну. Вы можете создать столько окон, сколько захотите. Приложение заканчивается, когда заканчиваются все потоки, а не когда все окна расположены. Обычно это достигается с помощью System.exit (0).

Я не знаю, есть ли определенный шаблон дизайна для этого случая. Я рекомендую учебник по Java Swing.

Лоран Пирейн
источник
1
-1. Это вопрос дизайна шаблона. Рекомендация изменить спецификации, которые мне дали, и заканчивая словами «я не знаю, есть ли конкретный шаблон дизайна», не отвечает.
появляется
2
Его ответ очень точный. У вас нет проблемы с шаблоном проектирования, вам нужно сначала узнать, как работают формы и диалоги.
Алекс
2

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

Этот метод имеет много преимуществ, особенно при работе с глобальными нажатиями клавиш и событиями мыши, а также при ведении журналов верхнего уровня и обработке исключений.

Нил Тибревала
источник