Как правильно комбинировать MVC с использованием функции invokeLater () в Swing? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь купить дизайн Swing UI и пишу GUI для своего назначения Java-класса.Это простое приложение базы данных с функциями CRUD и GUI.До сих пор я реализовал backend с классами менеджера (подключенными к базе данных; для получения / хранения данных), которые служат частью модели в моем графическом интерфейсе и компоненте представления, без каких-либо действий.То, что я хочу сделать сейчас, так или иначе соединить два.Я создал класс контроллера, который инкапсулирует представление и модель (менеджеры, которые возвращают данные).Теперь моя проблема в том, что у меня возникло недопонимание относительно того, что запускать, а что нет в потоке диспетчера событий (насколько я понимаю, его следует запускать с помощью метода invokeLater ()).Я также не понимаю, вызывая пустой конструктор для моего класса представления (где все компоненты объявлены), действительно ли я запускаю некоторые компоненты пользовательского интерфейса или пользовательский интерфейс запускается только после создания нового JFrame?А как насчет класса контроллера?Должен ли он работать и в EDT?

Вот код моего Main, где я запускаю интерфейс с invokeLater ():

AssignmentManager assignmentManager = new AssignmentManagerImpl(ds);
AgentManager agentManager = new AgentManagerImpl(ds);
MissionManager missionManager = new MissionManagerImpl(ds);


App gui = new App();

EventQueue.invokeLater(() ->
{
    JFrame frame = new JFrame();
    frame.add(gui.mainPanel);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setVisible(true);
});

Controller c = new Controller(assignmentManager, agentManager, missionManager, gui);

Спасибо за ваши ответы

...