javafx 之获取fxml的控制器(controller)

本文介绍了一种在JavaFX中加载FXML文件并获取其控制器的方法。通过使用URL定位资源、FXMLLoader加载器及JavaFXBuilderFactory,可以顺利实现界面及其控制器的初始化。
Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

像对话框一样的弹出一个fxml界面的时候,往往需要获取它的控制器,以便执行一些初始化的操作,获取fxml控制器的代码如下

       URL location = getClass().getResource("/Frame2XML/Frame2.fxml");

        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(location);
        fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
        javafx.scene.Parent root = (javafx.scene.Parent) fxmlLoader.load(location.openStream());
        Frame2Controller control=(Frame2Controller)fxmlLoader.getController();

 

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

### JavaFX 使用 FXML 创建用户界面教程 #### 一、简介 JavaFX 是一个用于构建富客户端应用程序的 Java 框架。该框架提供了一系列丰富的图形化用户界面(GUI)组件和强大的布局管理器,使得开发者可以轻松创建多样化的用户界面[^1]。 #### 二、FXML概述 FXML 是一种基于 XML 的标记语言,专门设计用来描述 JavaFX 应用程序的用户界面结构。通过 FXML 文件,开发者可以用声明式的语法定义 UI 组件及其属性,而无需编写大量的 Java 代码来初始化这些对象。在 FXML 中,每一个标签通常对应于特定类型的 Java 类实例或其成员变量/方法调用[^2]。 #### 三、加载 FXML 文档 为了将 FXML 定义的内容呈现给最终用户,在运行时需要借助 `FXMLLoader` 工具类完成这一过程。具体来说,可以通过调用 `FXMLLoader.load()` 方法并将目标 FXML 文件的位置作为参数传递进去实现这一点;此函数接收 URL 对象形式表示的目标资源路径[^3]。 ```java // 加载指定位置上的 fxml 文件并返回根节点 URL location = getClass().getResource("/path/to/search_demo.fxml"); Parent root = FXMLLoader.load(location); ``` #### 四、控制器关联与事件处理机制 当涉及到动态交互逻辑时,则需引入 Controller 来负责监听来自视图层的操作请求以及执行相应的业务操作。可以在 FXML 文件头部设置 `fx:controller` 属性指明对应的控制类名称,并确保两者之间存在映射关系以便正确绑定控件元素至相应字段上[^4]。 ```xml <!-- 设置 GridPane 布局容器为主面板 --> <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.MyAppController"> <!-- ...其他子项配置... --> </GridPane> ``` ```java public class MyAppController { } ``` #### 五、完整示例:登录表单页面 下面给出一段完整的例子展示如何利用上述知识点快速搭建起一个简单的登录对话框: ##### login_form.fxml (UI 设计部分) ```xml <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.PasswordField?> <?import javafx.scene.control.TextField?> <?import javafx.scene.layout.GridPane?> <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.LoginFormController" alignment="CENTER" hgap="10" vgap="10"> <Label text="Username:" GridPane.columnIndex="0" GridPane.rowIndex="0"/> <TextField fx:id="usernameInput" promptText="Enter your username..." GridPane.columnIndex="1" GridPane.rowIndex="0"/> <Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <PasswordField fx:id="passwordInput" promptText="Enter your password..." GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Button onAction="#handleLoginButtonClick" text="Sign In" GridPane.columnSpan="2" GridPane.rowIndex="2"/> <padding><Insets top="25" bottom="25" right="25" left="25"/></padding> </GridPane> ``` ##### LoginFormController.java (行为逻辑部分) ```java package com.example; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; public class LoginFormController { @FXML private TextField usernameInput; @FXML private PasswordField passwordInput; public void handleLoginButtonClick(ActionEvent event){ String name = this.usernameInput.getText(); char[] pwdChars = this.passwordInput.getText().toCharArray(); // 这里只是简单模拟验证流程... boolean isValidUser = "admin".equals(name) && Arrays.equals(pwdChars, "secret".toCharArray()); Alert alertBox = new Alert(isValidUser ? Alert.AlertType.INFORMATION : Alert.AlertType.ERROR); if (!isValidUser){ alertBox.setTitle("Authentication Failed!"); alertBox.setHeaderText(null); alertBox.setContentText("Invalid credentials provided."); }else{ alertBox.setTitle("Welcome Back!"); alertBox.setHeaderText(String.format("%s has successfully logged in.", name)); alertBox.setContentText(""); } alertBox.showAndWait(); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值