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