用一个替换多个控制器 (JavaFX)

Replacing multiple controllers with one (JavaFX)

我使用 Gloun SceneBuilder 设计了几个 GUI 这意味着每个 GUI 表单都有自己的控制器 例如: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 按钮处理程序) 所以所有的书籍事件都将进入一个控制器而不是单独的控制器 那可能吗?如果是这样,怎么办? \我看到它可能与lambda有关,但我真的不明白..

您可以简单地将同一个控制器设置为两个 fxml 文件 1 :

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");
    }
}


1 每个 fxml 使用不同的 Controller 实例,因此它 不是 共享实例