使用 FXML 的基本 JavaFX 项目
这是一个使用 FXML 的基础项目,使用 NetBeans 创建(New Project - > JavaFX - > JavaFX FXML Application)。它只包含三个文件:
主要应用类
package org.stackoverflow;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class BasicApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("BasicFXML.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
FXML 文件
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.stackoverflow.BasicFXMLController">
<children>
<Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
<Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" />
</children>
</AnchorPane>
调节器
package org.stackoverflow;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class BasicFXMLController {
@FXML
private Label label;
public void initialize() {
// TODO
}
@FXML
private void handleButtonAction(ActionEvent event) {
label.setText("Hello World!");
}
}
跑
构建和运行项目应该显示一个带有可点击按钮的小窗口:
这个怎么运作
简而言之,在主 Application 类中,FXMLLoader 将从 jar / classpath 加载 basicFXML.fxml
,由 FXMLLoader.load(
getClass().getResource("BasicFXML.fxml"))
指定。
加载 basicFXML.fxml
时,加载程序将找到控制器类的名称,由 FXML 中的 fx:controller="org.stackoverflow.BasicFXMLController"
指定。
然后加载器将创建该类的实例,在该实例中,它将尝试注入 FXML 中具有 fx:id
的所有对象,并在控制器类中标记 @FXML
注释。
在此示例中,FXMLLoader 将基于 <Label ... fx:id="label"/>
创建标签,并将标签实例注入 @FXML private Label label;
。
最后,当加载了整个 FXML 时,FXMLLoader 将调用控制器的 initialize
方法,并且将执行使用该按钮注册动作处理程序的代码。
编辑
虽然可以在 IDE 中编辑 FXML 文件,但不建议这样做,因为 IDE 仅提供基本语法检查和自动完成,但不提供可视指导。
最好的方法是使用 Scene Builder 打开 FXML 文件,其中所有更改都将保存到文件中。
可以启动 Scene Builder 来打开文件:
或者可以直接从 IDE 使用 Scene Builder 打开文件:
- 从 NetBeans,在项目选项卡上,双击该文件或右键单击并选择
Open
。 - 从 IntelliJ 中,在项目选项卡上,右键单击该文件并选择
Open In Scene Builder
。 - 从 Eclipse 中,在项目选项卡上,右键单击该文件并选择
Open with Scene Builder
。
如果正确安装了 Scene Builder 并将其路径添加到 IDE(请参阅下面的备注),它将打开文件:
可以通过从左窗格拖动新容器或新控件来进行更改,并且可以在右窗格中更改属性和布局值。
请注意,允许将 FXML 注入 Java 代码的 id 标记之一是 fx:id
。它可以在 Code
窗格中设置:
应用更改后,保存文件(Scene Builder - > File - > Save)。如果在 IDE 中编辑文件进行了更改,则在保存文件时,这些文件将在 Scene Builder 上更新。