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中可能会遇到的一些问题以及解决办法。

目录
相关文章
|
6月前
|
前端开发 Java API
使用JavaFX进行跨平台桌面应用开发的技术指南
【5月更文挑战第29天】JavaFX是Oracle的开源GUI工具包,用于跨平台桌面应用开发。它提供丰富的API、UI控件、图形动画支持及媒体集成。通过设置JDK和JavaFX SDK环境,使用IDE创建项目,编写并运行JavaFX代码,开发者可构建富客户端应用。遵循MVC模式、使用FXML和CSS,以及测试兼容性,能提升应用质量和用户体验。
QGS
|
6月前
|
前端开发 数据可视化 Java
手拉手JavaFX UI控件与springboot3+FX桌面开发(下)
手拉手JavaFX UI控件与springboot3+FX桌面开发
QGS
349 0
|
IDE Java 开发工具
|
安全 Java
javaFx 安全开发 三
javaFx 安全开发
|
数据可视化 Java Android开发
JavaGUI:eclipse+e(fx)clipse+JavaFX Scene Builder搭建JavaFX可视化开发环境
JavaGUI:eclipse+e(fx)clipse+JavaFX Scene Builder搭建JavaFX可视化开发环境
159 0
JavaGUI:eclipse+e(fx)clipse+JavaFX Scene Builder搭建JavaFX可视化开发环境
|
Java
JavaFX教程和资源整理-Scene Builder下载地址
JavaFX教程和资源整理-Scene Builder下载地址
212 0
|
Java
使用NetBeans和Scene Builder协作开发JavaFX2
目前来说,虽然开发JavaFx的工具不少,但是无疑,只有Netbeans才是最强大和最方便的,远超其他工具。 同时,Oracle官方也向开发者推荐了一个专门用于构建JavaFX场景的工具:JavaFX Scene Builder2. 诡异的是,这个工具的下载地址极其难找到。
1294 0
Xamarin.Android开发实践(二)
原文:Xamarin.Android开发实践(二) 一、准备 开始学习本教程前必须先完成该教程http://www.cnblogs.com/yaozhenfa/p/xamarin_android_quickstart.html 否则将无法继续。
993 0
|
Android开发
Xamarin.Android开发实践(一)
原文:Xamarin.Android开发实践(一) 一、准备工作 1.创建一个空的解决方案,并命名为Phoneword     2.右击解决方案 新建-》新建项目 并命名为Phoneword_Droid   二、界面 1.
1224 0
|
C# Java
Xamarin.Android开发实践(七)
原文:Xamarin.Android开发实践(七) Xamarin.Android广播接收器与绑定服务 一、前言 学习了前面的活动与服务后,你会发现服务对于活动而言似乎就是透明的,相反活动对于服务也是透明的,所以我们还需要一中机制能够将服务和活动之间架起一座桥梁,通过本节的学习,你将会学到广播与绑定服务,这两种方式恰恰是解决上面问题的关键。
1102 0