JavaFX文档(9)掌握FXML——1 为何选择FXML

时间:2022-04-07 23:39:03

声明:如需转载,请注明出处:http://blog.csdn.net/originer

原文地址:http://docs.oracle.com/javase/8/javafx/fxml-tutorial/why_use_fxml.htm

1.1         FXML简介

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

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

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

 

1.2         FXML的简单样例

下图展现了一个简单的FXML样例,其中包括一个borderpane布局,在其top和center区域各包含了一个文本标签。

JavaFX文档(9)掌握FXML——1 为何选择FXML

首先来看看构建上述UI的Java代码:

 

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

然后来看看下面对应的FXML,它也会构建同样的UI。从其中可以看出界面的层级结构,使得在界面之上增加组件变得更为方便。

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


1.3         使用FXML的好处

除了给Web开发者一个更为熟悉的UI开发方式之外,使用FXML还会得到如下好处:

  • FXML中场景图的结构更为清晰明了,使得开发组能更为方便地创建和维护一个可测试的用户界面。
  • FXML不需要编译就可以看到用户界面的改变。
  • FXML支持国际化,例如下面的例子就可以在使用en_US语言时产生“First Name”:

<Label text="%firstName"/>

而如果改为使用fx_FR,则标签会显示“Prénom”。

如果使用Java代码来实现国际化则可能需要手工写代码(例如setText())

  •  可以在任何基于JVM的语言中使用FXML,例如Java、Scala或Clojure
  • FXML不仅仅可用于构建MVC中的View的部分。也可以用它来构建服务、任务或领域数据模型,并且你可以在FXML中使用JavaScript或其它脚本语言。

1.4         FXML与SceneBuilder

可能有的开发人员喜欢直接编写XML,而另外一些开发人员则可能更喜欢使用工具来管理XML。这两种方式对FXML来说都是可以的。

如果你更喜欢工具,或者你希望创建一个用于获取用户反馈的快速原型,你可能更喜欢JavaFX Scene Builder。它可以帮助你快速开发用户界面,其产生的XML代码非常清晰,你也可以通过任何其他文本编辑器或XML编辑器来进行修改。

NetBeans IDE 7.4之后的版本提供了JavaFX SceneBuilder的集成支持。