2014-09-02 5 views
1

Мне было интересно, есть ли стандартный способ вызова GUI-метода. Например, я мог бы создать класс GUI и использовать конструктор для создания нового графического интерфейса и просмотра пользовательского интерфейса. Или я мог бы создать публичный статический метод внутри класса GUI и вызвать его из основного. Я хотел бы знать, есть ли правильный или неправильный способ сделать это. Или вы можете указать, как вы предпочитаете это самостоятельно.Правильный способ вызова графического интерфейса в Java

спасибо.

+0

Это GUI конкретный? Или вы имеете в виду «использовать конструктор или статический метод для создания новых экземпляров» в целом? –

+0

есть GUI конкретный. Мне просто любопытно, потому что вы можете сделать это несколькими способами. Просто хотел бы знать, есть ли стандартный или рекомендуемый путь, которому я должен следовать. – Noneedname

ответ

0

Ну для меня (JavaFX):

Я хотел, чтобы показать пользователю в начале приложения, что-то на самом деле происходит в фоновом режиме, так Ofcourse: Preloader является обязательным, в коде я загрузить все базы данных данных о необходимости/получения данных/подготовки предпочтений приложений, а затем ИНИЦИАЛИЗАЦИЯ КОНТРОЛЛЕРА/ПРОСМОТРА.

Я использую несколько методов, чтобы пройти через этот процесс в моей main.Breaking инициализации на несколько частей.

Я вижу вид в качестве последней вещи для дела при запуске приложения.

Javafx имеет хорошую структуру, которая заставляет вас не MESS UP, вы идете через линейный путь инициализации. Я использую главный контроллер и субконтроллеры. Главный контроллер инициализируется параметрами почти каждый раз по мере необходимости, то же самое касается субконтроллеров, когда они не определены внутри fxml.

(я держу один к одному отношениям-каждому файлу FXML (вид) имеет свой собственный контроллер, Additionaly иногда модель, когда данные должны быть приняты и отделено от логики контроллера)

Я использую несколько моделей для некоторой общей информации между контроллерами (одна и та же основная модель/вспомогательные модели)

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

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

Это то, что я делаю, что заставляет меня избегать кода Сфагетти. Я изучил свои уроки из качели, где мне кажется, что я пытаюсь использовать BRUTE FORCE MVC в моем дизайне, а затем не понимаю мой код.

Я надеюсь, что это поможет вам. В конце концов, по моему мнению, нет ТОЛЬКО ОДНОГО ПРАВИЛЬНОГО ПУТЕМ делать вещи. Личные предпочтения, технологии, которые вы используете, тип создаваемого вами программного обеспечения, являются факторами в этом.

+0

Отличный пост. Спасибо. К сожалению, мне не удается разрабатывать расширенные пользовательские интерфейсы, поэтому JavaFX немного далек от меня. Мой вопрос был больше основан на простом графическом интерфейсе swing и что может быть правильным способом вызвать этот GUI из основного. Я понимаю из вашего комментария, что нет правильного способа сделать это. Спасибо. – Noneedname

+0

@Noneedname Задайте себе, что более читаемо, для небольшого приложения просто инициализируйте основные с помощью некоторых частных статических методов, сложные системы будут иметь разные процессы и т. Д. Самое главное, что вы и люди, которые читают ваше исходное ядро, понимают, что происходит .Для моих небольших программ я использовал инициализацию класса, потому что это имело для меня больше смысла. Я рекомендую вам найти хорошую книгу о дизайне/архитектуре программного обеспечения и начать читать;) Даже если она не направлена ​​напрямую на guis, вы по-прежнему будете пользоваться от советов, и эти проблемы будут иметь гораздо больше смысла. –

2

Для меня у меня есть следующее решение на основе MVC, которое, на мой взгляд, ясно и дает неплохой обзор.

Графический интерфейс определен в классе GUI внутри пакета view и может выглядеть следующим образом:

package view; 

import javax.swing.JFrame; 
import controller.GameController; 

public class GUI extends JFrame { 
    // A controller class 
    private GameController gameController; 

    public GUI(String title, GameController gameController) { 
     super(title); 

     setSize(600, 400); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setLocationRelativeTo(null); 

     this.gameController = gameController; 
    } 
} 

Теперь у меня есть класс Main в пакете controller, которые инициализируются графический интерфейс и установить его видимым :

package manager; 

import javax.swing.SwingUtilities; 

import view.GUI; 
import controller.GameController; 

public class Main { 
    private static GUI gui; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       gui = new GUI("Title", new GameController()); 
       gui.setVisible(true); 
      } 
     }); 
    } 
} 

Это хорошо работает для меня.С помощью gameController вы можете теперь взаимодействовать с этим классом контроллера через некоторые действия пользователя внутри представления, чтобы изменить вашу модель. Может быть, это поможет вам немного. Там могут быть лучшие способы;)

+1

В ответе @ pzaenger «Главный» - это контроллер, а «GUI» - это вид. Swing немного путает проблему, поскольку большинство компонентов swing служат как представлению, так и роли контроллера в шаблоне MVC. Я часто использую шаблон, который он описывает, однако - добавляет отдельный класс модели, который поддерживает настройки приложения и состояние представления (например, положение экрана и размер окна). Будьте откровенны с ролью GUI: это просмотр и контроллер, или просто просмотр? В этой модели это просто взгляд. То же самое со встроенным графическим интерфейсом. –

Смежные вопросы