JavaFX入门(二):JavaFX和FXML

news/2024/11/8 20:39:21/

在我的JavaFXML系列博客第一篇《JavaFX入门(一):我的第一个JavaFX程序 》中我们用纯Java代码写了一个很简单的JavaFXML程序,这一节中我们使用FXML编写程序界面,然后用Java书写后台逻辑完成上一节中的程序,实现相同的功能。

通俗的理解FXML:FXML是一种以XML的格式表示JavaFX界面对象的文件,FXML文件中的每一个元素可以映射到JavaFX中的一个类,每个FXML元素的属性或者其子元素都可以映射为该对应JavaFXML类的属性。

我们在Eclipse创建一个简单的Java工程。一个最简单的工作包括:一个Java文件(HelloApplication.java,主程序入口),一个FMXL文件(MainPanel.fxml,主界面布局)和一个Controller文件(MainPaneController.java,Controller文件就是一个普通的Java类文件,用于控制界面交互事件的处理)。新建工程的截图如下:
Eclipse JavaFXML Project
首先,我们利用FMXL文件MainPanel.fxml编写界面:

<?xml version="1.0" encoding="UTF-8"?><!--导入JavaFXML类-->
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?><!--布局控件BorderPane,fx:controller属性用于声明事件处理的Controller,值为Controller类的类全名-->
<!--xmlns用于声明默认命名空间,这里的声明随着你安装的Java JDK版本号的不同可以不同,但是最好不要比你安装的JDK版本高-->
<BorderPane fx:controller="cn.tzy.fx.MainPaneController" xmlns="http://javafx.com/javafx/8.0.31" xmlns:fx="http://javafx.com/fxml/1"><center><!--声明一个Button元素,fx:id用于给该Button一个标示,用于和Controller类中的Button实例进行绑定--><!--onAction用于绑定Button的点击事件,handleButtonAction前面的#用于和Controller中处理函数进行绑定--><Button fx:id="btnHello" text="Hello World!" BorderPane.alignment="CENTER" onAction="#handleButtonAction"><!--这里我修改了Button默认的字体及其大小--><font><Font name="Arial" size="14.0" /></font></Button></center>
</BorderPane>

可以看到FXML文件中的元素BorderPane ,Button对应这JavaFX中的布局类或者控件类,Center是BorderPane的属性,而Font是Button的属性。所以,一般地,FXML文件中的每一个元素可以映射到JavaFX中的一个类,每个FXML元素的属性或者其子元素都可以映射为该对应JavaFXML类的属性。

然后,我们编写主类HelloApplication.java进行界面元素的加载:

package cn.tzy.fx;import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;public class HelloApplication extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {try {// 这里的root从FXML文件中加载进行初始化,这里FXMLLoader类用于加载FXML文件BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("MainPane.fxml"));Scene scene = new Scene(root, 500, 500);primaryStage.setScene(scene);primaryStage.setTitle("Hello World");primaryStage.show();} catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {launch(args);}
}

可以看到程序的大体部分和我们上一节是类似的,不同的是Scene中的控件都是在FXML文件中进行声明的,然后使用FXMLLoader类进行了加载。这样带来的好处就是前台设计和后台逻辑的分离。

最后,我们在Controller文件MainPaneController.java编写事件处理的代码:

package cn.tzy.fx;import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;public class MainPaneController {<!--这里的Button对象有需要加@FXML注解,然后变量的名称为你刚才在FXML文件中声明的Button的id属性-->@FXMLprivate Button btnHello;<!--这里的handleButtonAction方法为我们在FXML文件中声明的onAction的处理函数-->@FXMLprotected void handleButtonAction(ActionEvent event) {btnHello.setText("Hello World, I am JavaFX!");}}

@FXML注解用于说明该变量或者方法可以在FXML文件中进行访问。官方对@FXML的说明为:Annotation that tags a class or member as accessible to markup。handleButtonAction()方法在FXML文件中说明,为Button的onAction的属性值,我们在handleButtonAction()方法中进行点击按钮的处理逻辑。

我们运行程序,点击按钮结果如下:
运行结果

总结一下:

  1. JavaFX程序中我们可以使用FXML文件编写前台界面,使用FXMLLoader类将FXML文件绑定到主程序。
  2. 使用一个Controller类和@FXML注解将操作的逻辑绑定到FXML文件中的界面元素。
  3. 在FXML文件中使用fx:id属性声明界面元素的id,在Controller类中以相同的名称定义该元素。onAction属性值给定以#号开头的事件处理函数名称,在Controller类中实现该函数。

下一节中说说如何使用Eclipse插件以及SceneBuilder辅助我们编写JavaFX程序:JavaFX入门(三):使用Eclipse开发JavaFX程序 。


http://www.ppmy.cn/news/172064.html

相关文章

三菱fx2n64mr说明书_三菱FX2N-64MR-D编程手册(FX系列可编程控制器) - 三菱

大的输入/输出点数&#xff1a;64点。 电源电压&#xff1a;100–240VAC。 输入点数&#xff1a;32点。 输出点数&#xff1a;32点。 输出类型&#xff1a;晶体管(源型)。 耗电量&#xff1a;45W。 重量(kg)&#xff1a;1.0。 尺寸(WxHxD)mm&#xff1a;220x90x86。 内置CPU、电…

三菱FX系列PLC-编程3

内容包括功能指令指令介绍,编程实践总结(将1个STC12C5608AD单片机项目转换为PLC控制)与通用程序汇总。紫色文字是超链接,点击自动跳转至相关博文。持续更新,原创不易! 目录: 六、功能指令 9、外部IO设备指令 3)数字开关指令DSW(休眠) 4)七段译码指令SEGD(休眠) 5)带…

Win32:三菱FX3U/FX5U读写软元件方法和注意事项

目录 一、常见编址类型 二、不同编址类型的读写形式 三、需要特别避开的坑 一、常见编址类型 也就是地址编号的单位了&#xff0c;主要有以下8种形式 按位编址(1-bit编址)&#xff0c;三菱FXnU系列PLC软元件支持这种&#xff1b;按字节编址(8-bit编址)&#xff0c;一般PC机…

三菱FX2N系列PLC如何进行远程上下载和调试

三菱FX2N是一款高性能的可编程控制器&#xff0c;支持单元模块的扩展&#xff0c;支持程序的远程调试&#xff0c;操作简单&#xff0c;功能实用强大&#xff0c;在工业领域应用广泛&#xff0c;为工厂自动化应用提供最大的灵活性和控制能力。因此&#xff0c;熟悉三菱FX系列PL…

三菱FX3U——SFC并行的使用

在梯形图块中编写梯形图&#xff1b; PLC运行时ON一个扫描周期&#xff0c;置位S0&#xff1b; 此处必须用SET置位&#xff0c;OUT的话无效&#xff1b; 初始化步0得电&#xff1b; 步0中可以不写动作&#xff1b; 转移0条件满足后&#xff1b;向下执行&#xff1b; 转移0中…

xilinx FPGA FX2 usb通信模块之上位机发送的数据格式

当rom向fpga传输数据时&#xff0c;可以发送coe文件&#xff0c;规定数据进制&#xff0c;以及用逗号可以分开不同的数据&#xff0c;但是通过上位机经过usb向fpga传输数据时&#xff0c;就不能是简单的txt文件&#xff0c;要转换成纯二进制文件&#xff0c;才可以保证数据的准…

File does not exist or is not accessible:‘c:/Users/Administrator/Desktop/FX2_Stream_IN/FX2_Str

当使用vivado编译时&#xff0c;如果是从其他地方拷贝过来&#xff0c;并且是更换了器件类型的&#xff0c;那么可能ip核会出现错误&#xff0c;编译不成功。错误提示如下&#xff1a; File does not exist or is not accessible:c:/Users/Administrator/Desktop/FX2_Stream_IN…

xilinx FPGA usb模块的使用(VHDL)

此次实例中&#xff0c;使用的是小梅哥的xilinx a7系列200t的开发板&#xff0c;其中自带一个usb2.0模块&#xff0c;然后根据他的基于slave fifo的fpga数据回环实验改编&#xff0c;主要是小梅哥的例程是基于verilog的&#xff0c;以及是自己编写的一个fifo模块&#xff0c;然…