Как переключаться между окнами приложения и общаться с контроллером? - PullRequest
0 голосов
/ 05 июня 2011

При написании графического интерфейса, используя Java, каков подходящий способ переключения между различными окнами приложения, например, при нажатии кнопки? И.Е. Какие окна должны быть, JPanels, JFrames ...? И как все компоненты «видят» «контроллер домена» (класс, который связывает графический пакет с пакетом логики приложения)?

Любое руководство или ссылка будет оценена.

Ответы [ 4 ]

2 голосов
/ 05 июня 2011

Вы запускаете приложение с помощью Controller.В конструкторе вашего контроллера вы собираетесь инициализировать первый графический интерфейс, который хотите открыть, скажем, GUI_A:

private GUI_A gui_a = null;

Controller() {
    gui_a = new GUI_A(this);
}

Как вы могли заметить, я вызвал конструктор GUI_A с однимпараметр: this.this ссылается на экземпляр текущего класса, поэтому this имеет тип Controller.Конструктор GUI_A должен выглядеть примерно так:

private Controller controller = null;

GUI_A(Controller ctrl) {
    controller = ctrl;
}

Это простой способ получить графический интерфейс, известный для Controller.

Следующее, что вы сделаетеотображается GUI_A:

gui_a.setVisible(true);

Если вы теперь хотите обрабатывать нажатия кнопок, вы должны сделать это следующим образом:

Сначала вы добавляете метод, выполняемый действием, к своей кнопке.,И, как это рекомендуется в MVC, вы не хотите делать логику в своем представлении / графическом интерфейсе.Таким образом, вы также создаете соответствующий метод в вашем Controller для выполненного действия и вызываете его из своего графического интерфейса:

// Controller
GUI_A_button1_actionPerformed(ActionEvent evt) {
    // Add your button logic here
}

// GUI_A
button1_actionPerformed(ActionEvent evt) {
    controller.GUI_A_button1_actionPerformed(evt);
}

Обычно вам не нужно передавать ActionEvent-var в контроллер,как вам это не понадобится часто.Чаще вы читали текст из TextField и передавали его своему контроллеру:

// Controller
GUI_A_button1_actionPerformed(String text) {
    // Add logic for the text here
}

// GUI_A
button1_actionPerformed(ActionEvent evt) {
    controller.GUI_A_button1_actionPerformed(textField1.getText());
}

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

1 голос
/ 05 июня 2011

предложение: используйте tabbed-panel, JPanel - это просто контейнер Java, а JFrame должен быть внешними окнами, это разные вещидолжно быть несколько JPanels поверх одного JFrame.Ваше приложение может иметь несколько JFrames.

1 голос
/ 05 июня 2011

При написании графического интерфейса с использованием Java, каков подходящий способ переключения между различными окнами приложения, например, при нажатии кнопки?

Добавьте ActionListener к кнопке.В методе actionPerformed(ActionEvent) делайте то, что нужно сделать.

IE, какими должны быть окна, JPanels, JFrames ...?

Я бы рекомендовал сделать главное окно JFrame и использовать JDialog или JOptionPane для большинства других элементов.Кроме того, несколько элементов GUI могут быть добавлены в один пробел несколькими способами - CardLayout, JTabbedPane, JSplitPane, JDesktopPane/JInternalFrame, ..

И как всекомпоненты «видят» «контроллер домена» (класс, который связывает графический пакет с пакетом логики приложения)?

Один из способов - передать ссылку на объект между пользовательскими интерфейсами.

1 голос
/ 05 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...