Я не уверен, что есть один «лучший» способ структурировать код GUI.Как правило, вы должны следовать MVC.Ваша программа (модель) не должна никогда напрямую зависеть от вашего кода просмотра.Что ему разрешено делать, так это уведомлять контроллер о том, что модель (или ее части) изменилась, и что в зависимости от того, какие представления в данный момент отображают, указанную часть модели следует обновить.
Swing уже предоставляет этот уровень абстракции для некоторых изего типы компонентов, большинство классов (несколько странно) с суффиксом Model
.Простой пример, на который вы можете посмотреть: BoundedRangeModel
.Для каждой «единицы» данных, которой управляет ваша программа, должен быть только один экземпляр такой модели, и разные представления, отображающие эти данные, должны совместно использовать этот экземпляр.Ваш бизнес-код управляет этим объектом, и всякий раз, когда этот фрагмент данных изменяется, графический пользовательский интерфейс уведомляется об этом, вызывая некоторые прослушиватели событий.