@Visteras
Любознателен, интересуюсь новым и старым :)

Java, как правильно работать с окнами?

Собственно вопрос, что можно почитать по данному поводу? Что можно посмотреть из исходников на гите например?
Проблема вот в чем, в приложении можно быть достаточно много разных окон, естественно они должны как то между собой взаимодействовать. В общих чертах я понимаю что есть контроллер который работает с окном, но я считаю что он не должен иметь возможность непосредственно влиять на другое окно. Но при этом что делать если после выполнения определенных действий в первом окне требуется вызвать второе - я не очень понимаю.
Может кто подсказать в какую сторону копать? Если будет с примером кода - будет вообще замечательно.
P.S. Я понял что можно "подписываться" на определенные события, но вот как это работает практически - не очень понятно.
Использую Java FX. До этого с GUI особо не работал. Так что прошу помощи, уже третий день голову ломаю как взаимодействие между окнами организовать.
Если что-то описал не очень понятно - пишите, буду исправляться.
P.P.S. Еще интересует такой вопрос, лицензия позволяет использовать продукт в коммерческих целях? И нужно ли потом платить %?
  • Вопрос задан
  • 3841 просмотр
Решения вопроса 1
legbo
@legbo
Java developer and philosopher
Можно объявить целый класс как static или без static но в нем некоторые переменные, методы, как static и иметь к ним доступ со всех частей программы в любой момент времени. Т.е. и таким образом выстроить взаимодействие между различными контроллерами окон. В этом классе можете хранить только нужные ссылки на объекты и использовать их в нужно время, соответственно будет и нужное Вам ограниченное взаимодействие.

Я постоянно пользуюсь данным способом для осуществления коммуникации между окнами, вполне рабочее решение, без затраты ресурсов и времени.

Пример: например в блоке initialize создаете этот наш общий класс, через конструктор или через метод устанавливаете все нужные ссылки на нужные объекты, например какие-нибудь поля или нужные переменные. Затем в другом контроллере окна в любом месте Вы уже можете получить доступ к уже общим полям, переменным и тому, что Вы сочли нужным.

Я как понимаю Вы новичок, то вот держите простой пример:
public static class outStaticClass{
   public Button commonButton; //Общая кнопка.
 }


public class controllerWindow1 implements Initializable{
   private Button ourButtonForCommonClass;
   ...
  @Override
    public void initialize(URL url, ResourceBundle rb) {
     ourButtonForCommonClass = new Button("First button");
     outStaticClass oSC = new outStaticClass();
     outStaticClass.commonButton = ourButtonForCommonClass; // Сохранили ссылку на объект
    }
 }


public class controllerWindow2 implements Initializable{
  ... 
  //В любом месте  outStaticClass oSC = new outStaticClass();
  //и у нас есть доступ к объекту из первого окна controllerWindow1
  //можем изменить его текст или сделать disabled
  //лучше сделать не прямое взаимодействие через наш общий класс.
 }


По поводу лицензии я без понятия если честно, задайте отдельно вопрос, тоже кстати интересно.

Дополнение
Можете также, через static связать по средством bind многие поля, значения и так далее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы