JavaFX — лучший способ управлять различными контроллерами, используя методы друг друга?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 JavaFX — лучший способ управлять различными контроллерами, используя методы друг друга?

Сообщение Anonymous »

Я новичок в JavaFX. У меня проблемы с контроллерами.
У меня есть два графических интерфейса, называемые A и B, каждый со своим контроллером (ControllerA и ControllerB).
Моя программа довольно проста: она начинается с открытия A, и есть кнопка, которая при нажатии открывает B. И наоборот, у B есть кнопка, которая открывает A.
ControllerA имеет один метод, называемый «openA», а ControllerB имеет один метод, называемый «openB».
Итак, A нужен контроллер B, чтобы открыть B, и наоборот.
Я смотрел учебное пособие, и способ, которым он занимается связью с контроллером, следующий:

Код: Выделить всё

public class ControllerA{

public void onPressingButtonB(ActionEvent e) throws IOException{
FXMLLoader loaderB = new FXMLLoader(getClass().getResource("class-b.fxml"));
root = loaderB.load();
ControllerB controllerB = loaderB.getController();
controllerB.openB(e);
}

Но мне это кажется «не оптимальным». Каждый раз, когда я нахожусь в A и хочу перейти в B, мне нужно повторно создать контроллер B. Итак, я объявил, что у ControllerA есть ControllerB, и использовал следующий код:

Код: Выделить всё

public class ControllerA{

private ControllerB controllerb;
{
try {
controllerb = loadControllerB();
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public ControllerB loadControllerB() throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("class-b.fxml"));
root = loader.load();
return loader.getController();
}

public void onPressingButtonB(ActionEvent e) throws IOException{
controllerb.openB(e);
}
Таким образом, мой прослушиватель действий можно преобразовать в одну строку, создав экземпляр контроллера непосредственно в моем классе, и это работает просто великолепно.
Дело в том... конечно, мне нужно сделать это зеркально с ControllerB, но это приводит к серьезной проблеме: если ControllerA создает экземпляр ControllerB при создании, а ControllerB создает экземпляр ControllerA при создании... это цикл. Фактически, он зацикливается и выдает мне ошибку в методе загрузки.
Мой вопрос: есть ли способ исправить мой код и создать контроллеры только один раз (чтобы мой прослушиватель действий мог быть всего одна строка кода), или мне придется повторно инициализировать контроллеры каждый раз, когда мне придется их использовать?
Большое спасибо.

Подробнее здесь: https://stackoverflow.com/questions/753 ... rs-methods
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»