用一个控制器替换多个控制器(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实例,因此它是而不是共享的一个

最新更新