gpt4 book ai didi

java - 对同一个 fxml 文件使用两个 Controller 类

转载 作者:行者123 更新时间:2023-11-30 02:24:49 25 4
gpt4 key购买 nike

到目前为止,我一直在根元素中从 fxml 文件设置 Controller ,如下所示:

fx:controller = "control.MainController" 

我有一个带有 2 个选项卡的窗口,每个选项卡都充满了按钮、表格和其他元素...为了保持我的项目有序且易于阅读/维护,我想将FirstTabControllerSecondTabController 中的 Controller 代码。怎么做?

我可以使用两个不同的文件作为同一 fxml 文件的 Controller 类吗?

最佳答案

看看JavaFX TabPane - One controller for each tab - 您应该使用 fx:include 标签。

Main.java(假设所有文件都在 sample 包中)

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;

public class Main extends Application {

public void start(Stage stage) {
Parent root = null;

try {
root = FXMLLoader.load(getClass().getResource("sample.fxml"));
} catch (IOException e) {
e.printStackTrace();
}

Scene scene = new Scene(root, 300, 275);
stage.setTitle("FXML Welcome");
stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {
launch();
}
}

样本.fxml

<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Tab?>

<TabPane xmlns:fx="http://javafx.com/fxml">
<Tab text="Tab 1">
<content>
<fx:include source="tab1.fxml"/>
</content>
</Tab>
<Tab text="Tab 2">
<content>
<fx:include source="tab2.fxml"/>
</content>
</Tab>
</TabPane>

tab1.fxml

<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.control.Label?>
<StackPane xmlns:fx="http://javafx.com/fxml" fx:controller="sample.TabOneController">
<Label text="Tab 1"/>
</StackPane>

tab2.fxml

<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.control.Label?>
<StackPane xmlns:fx="http://javafx.com/fxml" fx:controller="sample.TabTwoController">
<Label text="Tab 2"/>
</StackPane>

使用 fx:include 标记添加的 FXML 文件是单独的文件,可以具有单独的 Controller 。

关于java - 对同一个 fxml 文件使用两个 Controller 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45915953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com