JavaFx-桌面应用开发利器(三)FXML和Scene Builder

简介: 本文首先简单介绍了Fxml和Scene Builder的基本知识,同时以eclipse为例,通过代码的形式说明如何进行Fxml的开发,最后使用SceneBuilder进行​应用快速开发。同时说明在使用eclipse中可能会遇到的一些问题以及解决办法​。

     本文接上文JavaFx-桌面应用开发利器(二)基础架构篇,在熟悉了JavaFx的基础框架后,通过基础的学习示例。相信你对基础的Stage和Scene对象等都有了一定的基础认识。在学习的时候,建议各位都能亲自动手进行编码,更有利于掌握相关知识。本文主要讲解JavaFx里面的FXML进行UI可视化开发,同时结合SceneBuilder,说明如何加速开发速度。

     一、首先介绍下简单介绍下FXML。

      FXML并没有定义schema,但是它具有一个基本的预定义结构。在FXML中所表达的内容,以及如何将其应用到构建一个场景图(Scene Graph),这些都取决于你所构造的API。由于FXML直接映射为Java代码,所以可以通过Java API文档来理解对应的XML元素和属性的含义。一般来说,大多数的JavaFX类都可以映射为XML元素,并且大多数的Bean属性都会被映射为元素的属性。

     从MVC设计模式的角度来看,FXML文件描述的用户界面是其中的View的部分。Controller是一个Java类,可以选择实现Initializable接口,用于将其声明为FXML文件的控制器(Controller)。Model部分包括了领域模型对象,使用Java代码来定义并通过Controller来与View关联。这样的结构在后面的章节“使用FXML来创建地址簿应用”中会给出样例。

      当你使用FXML来创建用户界面,尤其是在创建具有大型、复杂的场景图、表单、数据入口、复杂动画的用户界面时使用FXML会显得更为功能强大。FXML同样适于创建静态布局,例如表单、控件、表格等。另外,你也可以通过FXML使用脚本来构建动态布局。

BorderPane border = new BorderPane();
Label toppanetext = new Label("Page Title");
border.setTop(toppanetext);
Label centerpanetext = new Label ("Some data here");
border.setCenter(centerpanetext);

    上图是使用Java硬编码方式场景开发。下面来看使用FXML如何开发?

<BorderPane><top><Labeltext="Page Title"/></top><center><Labeltext="Some data here"/></center></BorderPane>

   实现的效果如下:

image.png

     了解MVC开发模式以及熟悉HTML甚至新前端开发模式的朋友知道,业务和视图需要分离。因此,上面的FXML即可理解成视图界面。

二、SceneBuilder

     JavaFX Scene Builder 是一个可视化布局工具,可快速设计 JavaFX 应用程序用户界面,无需编写代码。用户可以拖放UI 组件到工作区,修改组件的属性,应用样式表,而且在后台自动生成所创建布局的 FXML 代码。最后得到的是一个可以稍后与 Java 项目整合到一起的 FXML 文件,从而将 UI 与应用程序逻辑绑定起来。

    以eclipse为例,讲解如何集成Scene builder快速开发平台。

    第一步、需要在eclipse中安装E(fx)clipse,安装教程见http://www.javafxchina.net/blog/2015/11/efxclipse-install/。友情提示,如果是外网开发环境,可以直接安装eclipse插件(会自动管理相关依赖),如果是离线或者内网环境,建议直接安装全部集成的eclipse包。这样可以避免自己去找相关的依赖包,同时也提高效率。

    安装好插件的eclipse中关于javafx可以看到,说明安装成功:

image.png

   第二步、下载SceneBuilder,下载安装在电脑任意盘。

image.png

     SceneBuilder的运行界面如上图所示。

     第三步、在eclipse中配置SceneBuilder运行程序关联。

image.png

     在eclipse中配置场景构建器的安装目录,便于在开发时可以直接在eclipse中直接打开。

     第四步、在eclipse中创建javaFx工程,并新建Fxml文件。

image.png

   温馨提示,使用eclipse的时候需要格外注意下,请注意当前工程的编辑窗口是在package 模式下还是在navigator模式。如果你发现在Fxml文件右键找不到Open with SceneBuilder的入口。请观察是否是在navigator模式下,只要切换到package模式下即可。

image.png

     打开后,可以看到编写好的页面实例

image.png

第五步、在SceneBuilder编辑器中关联Controller处理相关逻辑。

image.png

   上述便是在SceneBuilder中进行关联代码的设置,需要注意的是,对应的处理controller需要提前创建好,这里的ui对象,需要在属性信息中给fx:id进行统一命名。保存相应配置后,可以看到View.fxml文件发生了改变。

<?xmlversion="1.0"encoding="UTF-8"?><?importjavafx.scene.control.Button?><?importjavafx.scene.control.Label?><?importjavafx.scene.control.PasswordField?><?importjavafx.scene.control.TextField?><?importjavafx.scene.layout.AnchorPane?><?importjavafx.scene.text.Font?><AnchorPanemaxHeight="-Infinity"maxWidth="-Infinity"minHeight="-Infinity"minWidth="-Infinity"prefHeight="292.0"prefWidth="600.0"xmlns="http://javafx.com/javafx/8.0.171"xmlns:fx="http://javafx.com/fxml/1"fx:controller="application.ViewController"><children><LabellayoutX="138.0"layoutY="78.0"text="账号:"><font><Fontname="System Bold"size="17.0"/></font></Label><TextFieldfx:id="loginName"layoutX="210.0"layoutY="71.0"prefHeight="35.0"prefWidth="228.0"/><LabellayoutX="138.0"layoutY="129.0"text="密码:"><font><Fontname="System Bold"size="17.0"/></font></Label><PasswordFieldfx:id="loginPwd"layoutX="210.0"layoutY="124.0"prefHeight="35.0"prefWidth="228.0"/><Buttonfx:id="btnLogin"layoutX="210.0"layoutY="179.0"mnemonicParsing="false"onAction="#loginIn"prefHeight="23.0"prefWidth="71.0"text="登录"><font><Fontname="System Bold"size="17.0"/></font></Button><Buttonfx:id="btnCancel"layoutX="367.0"layoutY="179.0"mnemonicParsing="false"prefHeight="23.0"prefWidth="71.0"text="取消"><font><Fontname="System Bold"size="17.0"/></font></Button></children></AnchorPane>

对应的controller代码如下:

image.png

image.png

然后把生成的controller代码拷贝到工程中的对应类中即可。完整的java代码如下:

packageapplication;
importjavafx.event.ActionEvent;
importjavafx.fxml.FXML;
importjavafx.scene.control.Button;
importjavafx.scene.control.PasswordField;
importjavafx.scene.control.TextField;
publicclassViewController {
@FXMLprivateTextFieldloginName;
@FXMLprivatePasswordFieldloginPwd;
@FXMLprivateButtonbtnLogin;
@FXMLprivateButtonbtnCancel;
@FXMLvoidloginIn(ActionEventevent) {
StringuserName=loginName.getText();
Stringpwd=loginPwd.getText();
System.out.println(userName+"==="+pwd);
if(userName.equals("admin") &&pwd.equals("123456")) {
System.out.println("登录成功");
        }else {
System.out.println("用户名或密码错误");
        }
    }
}

完整的功能示例如下:

image.png

    三、总结

      本文首先简单介绍了Fxml和Scene Builder的基本知识,同时以eclipse为例,通过代码的形式说明如何进行Fxml的开发,最后使用SceneBuilder进行应用快速开发。同时说明在使用eclipse中可能会遇到的一些问题以及解决办法。

目录
相关文章
|
前端开发 网络协议 Dubbo
超详细Netty入门,看这篇就够了!
本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。
96183 33
超详细Netty入门,看这篇就够了!
|
Java 开发者
Java一分钟之-JavaFX布局管理:GridPane, VBox, HBox
本文介绍了JavaFX的三种常用布局管理器:GridPane、VBox和HBox。GridPane用于创建二维网格布局,需设置行和列约束以防止控件重叠。VBox按垂直方向堆叠控件,记得设置间距。HBox水平排列控件,可能需要分配额外空间以避免水平滚动条。示例代码展示了这三种布局的使用。理解并运用这些布局管理器能提升JavaFX应用的界面设计。
800 0
|
Java
IDEA的fxml打开Scene Builder后空白! Scene Builder下载依赖后还是空白不显示 无论如何都不显示,网上的教程试过来了遍还是不显示
本文提供了三种方法来解决IDEA中fxml文件在Scene Builder中打开后显示空白的问题:检查JavaFX是否安装、切换IDEA版本、下载Scene Builder插件。
1205 1
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
14963 5
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
35634 1
|
网络协议 网络安全
如何使用Traceroute定位网络问题?
`Traceroute` 是网络诊断工具,用于追踪数据包从源主机到目标主机的路径,帮助定位网络延迟、路由故障或中间节点问题。常用参数包括禁用DNS解析(`-n`)、指定最大跳数(`-m`)、每跳探测包数量(`-q`)等。结果解读涉及时间值、符号含义(如`*`表示未响应),并可进行高级用法如指定源接口、强制使用ICMP或TCP协议。常见问题包括中间节点高延迟、路径终点无法到达和路径环路,需根据具体情况进行排查和解决。
2683 1
idea+javafx的真正打包方式
本文介绍了使用IntelliJ IDEA进行JavaFX项目打包的正确方法,包括编写一个调用主类的类、引入JavaFX的DLL文件、执行打包操作以及运行打包后的项目的步骤。
1569 0
idea+javafx的真正打包方式
|
Java
把javafx项目打包成exe文件详细过程
本文简化了将JavaFX项目打包成exe文件的过程,首先通过Idea将项目打包成jar包,然后使用GraalVM的native-image工具将jar包编译成exe文件,并展示了执行命令和运行结果。
1165 0
把javafx项目打包成exe文件详细过程
|
Java 开发者
javafx jlink 遇到的非模块化的依赖打包报错“模块异常”的问题和处理
【9月更文挑战第18天】在使用JavaFX的jlink进行应用打包时,非模块化依赖可能导致“模块异常”报错。此文档详细分析了该问题的原因,并提供了四种解决方案:模块化依赖、自动模块转换、手动创建模块描述符及检查模块依赖关系。通过这些方法,可以有效解决此类问题,提高项目的可维护性和扩展性。建议开发者优先选用模块化设计。
1434 1