网站开发中视屏怎样编辑到网页上,案例学习网站建设方案,wordpress用户中心商城,温江做网站哪家好翻译自 使用FXML创建用户界面
本教程展示了使用JavaFX FXML的好处#xff0c;JavaFX FXML是一种基于XML的语言#xff0c;它提供了构建与代码的应用程序逻辑分开的用户界面的结构。
如果您从一开始就开始使用本文档#xff0c;那么您已经了解了如何使用JavaFX创建登录应用…翻译自 使用FXML创建用户界面
本教程展示了使用JavaFX FXML的好处JavaFX FXML是一种基于XML的语言它提供了构建与代码的应用程序逻辑分开的用户界面的结构。
如果您从一开始就开始使用本文档那么您已经了解了如何使用JavaFX创建登录应用程序。在这里您使用FXML创建相同的登录用户界面将应用程序设计与应用程序逻辑分离从而使代码更易于维护。您在本教程中构建的登录用户界面如图6-1所示。 图6-1登录用户界面 本教程使用NetBeans IDE。确保您使用的NetBeans IDE版本支持JavaFX 8.有关详细信息请参阅Java SE下载页面的“认证系统配置”部分。 1、设置项目
您的第一个任务是在NetBeans IDE中设置JavaFX FXML项目 从“ 文件”菜单中选择“ 新建项目”。 在JavaFX应用程序类别中选择JavaFX FXML Application。单击下一步。 将项目命名为FXMLExample然后单击Finish。 NetBeans IDE打开一个FXML项目其中包含基本Hello World应用程序的代码。该应用程序包括三个文件 FXMLExample.java. 该文件负责FXML应用程序所需的标准Java代码。 FXMLDocument.fxml. 这是您在其中定义用户界面的FXML源文件。 FXMLDocumentController.java. 这是用于处理鼠标和键盘输入的控制器文件。 重命名FXMLDocumentController.java为FXMLExampleController.java以使该名称对此应用程序更有意义。 在“项目”窗口中右键单击“ FXMLDocumentController.java”然后选择“ 重构”然后选择“ 重命名”。 输入FXMLExampleController然后单击“ 重构”。 重命名FXMLDocument.fxml为fxml_example.fxml. 右键单击FXMLDocument.fxml并选择“ 重命名”。 输入fxml_example并单击“ 确定”。 2、加载FXML源文件
您编辑的第一个文件是FXMLExample.java文件。此文件包含用于设置应用程序主类和定义舞台和场景的代码。更具体的FXML该文件使用FXMLLoader该类该类负责加载FXML源文件并返回结果对象图。
在例6-1中进行粗体显示的更改。 例6-1 FXMLExample.java Overridepublic void start(Stage stage) throws Exception {Parent root FXMLLoader.load(getClass().getResource(fxml_example.fxml));Scene scene new Scene(root, 300, 275);stage.setTitle(FXML Welcome);stage.setScene(scene);stage.show();}
一个好的做法是在创建场景时设置场景的高度和宽度在本例中为300乘275; 否则场景默认为显示其内容所需的最小尺寸。 3、修改导入语句
接下来编辑该fxml_example.fxml文件。此文件指定应用程序启动时显示的用户界面。第一项任务是修改import语句使代码如例6-2所示。 示例6-2 XML声明和导入语句
?xml version1.0 encodingUTF-8??import java.net.*?
?import javafx.geometry.*?
?import javafx.scene.control.*?
?import javafx.scene.layout.*?
?import javafx.scene.text.*?
与在Java中一样类名可以是完全限定的包括包名也可以使用import语句导入它们如例6-2所示。如果您愿意可以使用引用类的特定import语句。 4、创建GridPane布局
NetBeans生成的Hello World应用程序使用AnchorPane布局。对于登录表单您将使用GridPane布局因为它使您能够创建灵活的行和列网格以在其中布置控件。
删除AnchorPane布局及其子项并将其替换GridPane为示例6-3中的布局。 示例6-3 GridPane布局
GridPane fx:controllerfxmlexample.FXMLExampleController xmlns:fxhttp://javafx.com/fxml alignmentcenter hgap10 vgap10
paddingInsets top25 right25 bottom10 left25//padding/GridPane
在此应用程序中GridPane布局是FXML文档的根元素因此具有两个属性。fx:controller在标记中指定基于控制器的事件处理程序时该属性是必需的。该xmlns:fx属性始终是必需的并指定fx命名空间。
代码的其余部分控制网格窗格的对齐和间距。alignment属性将网格的默认位置从场景的左上角更改为中心。在gap性能管理行和列之间的间距而padding物业管理围绕网格窗格边缘的空间。
在调整窗口大小时网格窗格中的节点将根据其布局约束进行调整大小。在此示例中当您增大或缩小窗口时网格将保留在中心。填充属性确保在使窗口变小时网格周围有填充。 5、添加文本和密码字段
回顾图6-1您可以看到登录表单需要标题“欢迎”以及用于从用户收集信息的文本和密码字段。例6-4中的代码是GridPane布局的一部分必须放在/GridPane语句的上方。 示例6-4文本标签TextField和密码字段控件
Text textWelcome GridPane.columnIndex0 GridPane.rowIndex0GridPane.columnSpan2/Label textUser Name:GridPane.columnIndex0 GridPane.rowIndex1/TextField GridPane.columnIndex1 GridPane.rowIndex1/Label textPassword:GridPane.columnIndex0 GridPane.rowIndex2/PasswordField fx:idpasswordField GridPane.columnIndex1 GridPane.rowIndex2/
第一行创建一个Text对象并将其文本值设置为Welcome。的GridPane.columnIndex和GridPane.rowIndex属性对应的放置Text在网格控制。网格中行和列的编号从零开始Text控件的位置设置为0,0这意味着它位于第一行的第一列中。该GridPane.columnSpan属性设置为2使欢迎标题跨越网格中的两列。当您添加样式表以将文本的字体大小增加到32磅时您将在本教程后面需要这个额外的宽度。
下一行创建一个Label对象其中第User Name0列第1行为文本第1列为第1行TextField右侧为对象。另一行Label和PasswordField对象以类似方式创建并添加到网格中。
使用网格布局时可以显示网格线这对于调试非常有用。在这种情况下通过在语句后添加语句gridLinesVisible来将属性设置为。然后当您运行应用程序时您会看到网格列和行的行以及间隙属性如图6-2所示。truegridLinesVisibletrue/gridLinesVisiblepadding/padding 图6-2带网格线的登录表单 6、添加按钮和文本
应用程序所需的最后两个控件是Button用于提交数据的Text控件和用于在用户按下按钮时显示消息的控件。代码在例6-5中。之前添加此代码/GridPane。 例6-5 HBoxButton和Text
HBox spacing10 alignmentbottom_right GridPane.columnIndex1 GridPane.rowIndex4Button textSign In onAction#handleSubmitButtonAction/
/HBoxText fx:idactiontargetGridPane.columnIndex0 GridPane.columnSpan2GridPane.halignmentRIGHT GridPane.rowIndex6/
HBox需要一个窗格来设置按钮的对齐方式该方框与应用于GridPane布局中其他控件的默认对齐方式不同。该alignment属性设置为bottom_right将空间底部的节点垂直放置并在空间的右边缘水平放置。该HBox窗格将添加到第1列第4行的网格中。
该HBox窗格有一个孩子一个Button与text属性设置为Sign in和onAction设置属性handleSubmitButtonAction()。虽然FXML是定义应用程序用户界面结构的便捷方式但它并未提供实现应用程序行为的方法。您可以handleSubmitButtonAction()在本教程的下一部分“ 添加代码来处理事件”中实现Java代码中的方法行为。
分配一个fx:id值到一个元素如在对所述代码中所示Text的控制创建在文档的命名空间的变量该变量可以参考从代码的其他地方。虽然不是必需的但定义控制器字段有助于阐明控制器和标记的关联方式。 7、添加代码来处理事件
现在Text当用户按下按钮时控件会显示一条消息。你在FXMLExampleController.java文件中这样做。删除NetBeans IDE生成的代码并将其替换为例6-6中的代码。 例6-6 FXMLExampleController.java
package fxmlexample;import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.text.Text;public class FXMLExampleController {FXML private Text actiontarget;FXML protected void handleSubmitButtonAction(ActionEvent event) {actiontarget.setText(Sign in button pressed);}}
该FXML注释被用于标记非公共控制器成员字段和处理程序方法用于通过FXML标记使用。该handleSubmtButtonAction方法将actiontarget变量设置为Sign in button pressed用户按下按钮时。
您现在可以运行该应用程序以查看完整的用户界面。图6-3显示了在两个字段中键入文本并单击“登录”按钮时的结果。如果您有任何问题那么您可以将您的代码与FXMLLogin示例进行比较。 图6-3 FXML登录窗口 8、使用脚本语言处理事件
作为使用Java代码创建事件处理程序的替代方法您可以使用提供与JSR 223兼容的脚本引擎的任何语言来创建处理程序。这些语言包括JavaScriptGroovyJython和Clojure。
您可以选择立即尝试使用JavaScript。 在文件中fxml_example.fxml在XML doctype声明之后添加JavaScript声明。 ?language javascript? 在Button标记中更改函数的名称以使调用如下所示 onActionhandleSubmitButtonAction(event); fx:controller从GridPane标记中删除属性并将JavaScript函数script直接添加到其下的标记中如例6-7所示。 例6-7 FXML中的JavaScript GridPane xmlns:fxhttp://javafx.com/fxml alignmentcenter hgap10 vgap10fx:scriptfunction handleSubmitButtonAction() {actiontarget.setText(Calling the JavaScript);}/fx:script 或者您可以将JavaScript函数放在外部文件例如fxml_example.js中并包含如下脚本 fx:script sourcefxml_example.js/
结果如图6-4所示。 图6-4使用JavaScript登录应用程序 如果您正在考虑使用FXML脚本语言请注意IDE可能不支持在调试期间单步执行脚本代码。 9、使用CSS设置应用程序样式
最后的任务是通过添加层叠样式表CSS使登录应用程序看起来很有吸引力。 创建样式表。 在“项目”窗口中右键单击“源包”下的fxmlexample文件夹然后选择“ 新建”再选择“ 其他”。 在“新建文件”对话框中选择“ 其他”然后选择“ 层叠样式表”并单击“ 下一步”。 输入Login并单击Finish。 将Login.css文件的内容复制到CSS文件中。该Login.css文件包含在可下载的LoginCSS.zip文件中。有关CSS文件中的类的说明请参阅使用JavaFX CSS的花式表单。 通过右键单击background.jpg文件并将其保存到fxmlexample文件夹下载背景的灰色亚麻图像。 打开fxml_example.fxml文件并在GridPane布局标记结束之前添加样式表元素如例6-8所示。 例6-8样式表 stylesheetsURL valueLogin.css //stylesheets/GridPane URL中样式表名称前面的符号表示样式表与FXML文件位于同一目录中。 要使用网格窗格的根样式请将样式类添加到GridPane布局的标记中如例6-9所示。 示例6-9设置GridPane的样式 GridPane fx:controllerfxmlexample.FXMLExampleController xmlns:fxhttp://javafx.com/fxml alignmentcenter hgap10 vgap10 styleClassroot welcome-text为Welcome Text对象创建一个ID使其使用#welcome-textCSS文件中定义的样式如例6-10所示。 示例6-10文本ID Text idwelcome-text textWelcome GridPane.columnIndex0 GridPane.rowIndex0 GridPane.columnSpan2/ 运行该应用程序。图6-5显示了程式化的应用程序。如果遇到问题请查看可下载的FXMLExample.zip文件中包含的代码 图6-5样式化登录应用程序 10、从这往哪儿走
既然您熟悉FXML请查看FXML 简介它提供了有关构成FXML语言的元素的更多信息。该文档包含在API文档的javafx.fxml包中。
您还可以通过fxml_example.fxml在Scene Builder中打开文件并进行修改来试用JavaFX Scene Builder工具。此工具为JavaFX应用程序的UI设计提供了可视化布局环境并自动为布局生成FXML代码。请注意保存时可能会重新格式化FXML文件。有关此工具的更多信息请参阅JavaFX Scene Builder入门。使用CSS进行Skinning和JavaFX Scene Builder用户指南的CSS Analyzer部分还可以为您提供有关如何为FXML布局设置外观的信息。