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

时间:2018-12-23 08:22:16

标签: java javafx scenebuilder

我使用Gloun SceneBuilder设计了多个GUI 这意味着每个GUI表单都会有自己的contoller 例如: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有关,但是我真的不明白。

1 个答案:

答案 0 :(得分:1)

您可以在两个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");
    }
}