Замена нескольких контроллеров одним (JavaFX) - PullRequest
0 голосов
/ 23 декабря 2018

Я разработал несколько графических интерфейсов с использованием Gloun SceneBuilder. Это означает, что каждая форма графического интерфейса будет иметь свой собственный контроллер. Например: AddBookForm.fxml будет иметь AddBookController.java

    import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class AddBookController {

    @FXML
    private Button btnAddBook;

    @FXML
    void AddBook(MouseEvent event) {

    }

}

EditBookForm.fxml будет иметьEditBookController

    import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class PleaseProvideControllerClassName {

    @FXML
    private Button btnEditBook;

    @FXML
    void editBook(MouseEvent event) {

    }

}

Итак, я хотел бы объединить оба контроллера GUI в один, один из которых я бы назвал BookController (он будет иметь обработчики кнопок AddBook и EditBook). Таким образом, все события книг будут находиться в одном контроллере.отдельных это возможно?и если да, то как?\ Я видел, что это может быть связано с лямбда, но я действительно не понимаю ..

1 Ответ

0 голосов
/ 23 декабря 2018

Вы можете просто установить один и тот же контроллер в двух fxml файлах:

A.fxml

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.HBox?>

<HBox xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller">
   <children>
      <Button fx:id="buttonA" onAction="#buttonAClicked" text="A" textAlignment="CENTER" />
   </children>
</HBox>

B.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.HBox?>

<HBox xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="src.tests.xml.Controller">
   <children>
      <Button fx:id="buttonB" onAction="#buttonBClicked" text="B" textAlignment="CENTER" />
   </children>
</HBox>

Controller.java (используется обоими)

import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class Controller{

    @FXML
    private Button buttonA, buttonB;

    public void buttonAClicked(){
        System.out.println("Button A clicked");
    }

    public void buttonBClicked(){
        System.out.println("Button B clicked");
    }
}
...