Я всегда кодировал консольные приложения и изучал основные навыки UML/шаблонов, используя C++.GUI-слой vs Code layer vs Swing
Теперь я решил перейти на Java и добавить графические интерфейсы в свои программы.
Первый вопрос - как обрабатывать слой GUI в программе. Я имею в виду, как я должен отделить весь код GUI (добавление компонентов, обработку основных событий) с кодом, который действительно выполняет задание (например, при нажатии какой-либо кнопки).
Другой вопрос, связанный с этим по EDT. Я читал, что (почти) все компоненты Swing должны запускаться в одном и том же потоке (обычно EDT) из-за того, что они не являются потокобезопасными. Поэтому я подумал, что если «тяжелый код» вызывается из (например) ActionListener
, тогда графический интерфейс перестанет быть нерешенным в течение некоторого времени, пока не закончится «тяжелый код».
Это очень нежелательно, поэтому я считаю, что естественным решением является выполнение тяжелого кода, возможно, в другом потоке или что-то подобное (я знаю, что это нужно делать осторожно, потому что я не мог больше предположить, что после пользователь нажал кнопку, «глубокое действие» выполняется перед обращением к другому графическому интерфейсу).
Итак, как вы видите, у меня есть много вопросов о том, как включить графический интерфейс в мои шаблоны, чтобы сохранить все совершенно независимые и легко поддерживаемые; и некоторые вопросы о конкретных вещах компонентов Swing и отзывчивости.