1 为什么使用FXML
本章提供了FXML的基本描述以及使用它创建用户界面的好处。
FXML是一种基于XML的语言,它提供了一个从应用程序代码中分离出用户界面结构的方式。这种呈现和应用程序逻辑的分离对于Web开发人员非常有吸引力,因为他们可以组装一个利用Java组件的用户界面,而无需掌握获取和填充数据的代码。
以下各节提供了关于FXML的更多信息,以及何时选择FXML而不是其他创建用户界面的方法:
FXML简介
FXML没有模式,但它有一个基本的预定义结构。您可以在FXML中表达的内容以及它如何应用于构建场景图取决于您正在构建的对象的API。因为FXML直接映射到Java,您可以使用API文档来了解允许使用哪些元素和属性。一般来说,大多数JavaFX类都可以用作元素,大多数Bean属性都可以用作属性。
从模型视图控制器(MVC)的角度来看,包含用户界面描述的FXML文件是视图。控制器是一个Java类,可以选择实现Initializable
类,它被声明为FXML文件的控制器。模型由在Java端定义的领域对象组成,您通过控制器将其连接到视图。这种结构的示例可以在教程使用FXML创建通讯录中找到。
虽然您可以使用FXML创建任何用户界面,但FXML特别适用于具有大型、复杂的场景图、表单、数据输入或复杂动画的用户界面。FXML也非常适合定义静态布局,如表单、控件和表格。此外,您还可以使用FXML通过包含脚本来构建动态布局。
FXML的简单示例
最简单的展示FXML优势的方式是通过一个示例。看一下图1-1,它展示了一个包含边界面板布局的用户界面,其中包含一个顶部和一个中心区域,每个区域都包含一个标签。
首先,看一下用户界面是如何直接在源代码中构建的,如示例1-1所示。
示例1-1 创建用户界面的Java代码
BorderPane border = new BorderPane(); Label toppanetext = new Label("页面标题"); border.setTop(toppanetext); Label centerpanetext = new Label ("这里有一些数据"); border.setCenter(centerpanetext);
接下来,看一下示例1-2,它展示了相同的用户界面,但使用FXML标记。你可以看到用户界面的层次结构,这使得添加组件和构建用户界面更加容易。
FXML的优势
除了为Web开发人员提供了一种熟悉的设计用户界面的方法外,FXML还提供了以下优势:
-
由于FXML中的场景图更加透明,开发团队可以轻松创建和维护可测试的用户界面。
-
FXML不是一种编译语言,您不需要重新编译代码即可看到更改。
-
FXML文件的内容可以在读取文件时进行本地化。例如,如果使用en_US区域设置加载FXML文件,则基于以下资源字符串的标签将显示"First Name":
<Label text="%firstName"/>
如果将区域设置更改为fr_FR并重新加载FXML文件,则标签将显示"Prénom"。
对于Java代码来说,情况并非如此,因为您必须通过获取引用并调用适当的setter(例如
setText()
)来手动更新用户界面的每个元素的内容。 -
您可以将FXML与任何Java虚拟机(JVM)语言一起使用,例如Java、Scala或Clojure。
-
FXML不仅限于MVC界面的视图部分。您可以构建服务、任务或领域对象,并且可以在FXML中使用JavaScript或其他脚本语言。有关使用JavaScript的示例,请参见入门指南中FXML教程的使用脚本语言处理事件。
FXML和Scene Builder
就像一些开发人员更喜欢直接在XML代码中工作一样,其他开发人员更喜欢使用工具来编写他们的XML。对于FXML也是如此。
如果您喜欢使用工具,或者想要创建一个快速原型以获取反馈意见,那么您可能更喜欢使用JavaFX Scene Builder。Scene Builder是一个设计工具,它在您定义应用程序的用户界面时生成FXML源代码。Scene Builder可以帮助您快速创建一个将组件连接到应用程序逻辑的交互式应用程序的原型。有关更多信息,请参见《JavaFX Scene Builder入门指南》。
由于Scene Builder使用XML作为序列化格式,生成的FXML代码非常清晰,您可以在任何文本或XML编辑器中进一步编辑由Scene Builder生成的FXML文件。
NetBeans IDE 7.4或更高版本使您能够在JavaFX Scene Builder中打开FXML文件,前提是您的计算机上安装了Scene Builder。NetBeans和Scene Builder的这种更紧密的集成在开发FXML应用程序时提供了额外的优势。