JavaFX是基于Java的平台,用于构建可在台式机或移动设备上运行的富Internet应用程序(RIA)。 用JavaFX构建的应用程序是基于Java字节码的,因此它们可以在装有Java运行时环境的任何桌面上运行,也可以在装有Java2 ME的任何移动设备上运行。 JavaFX使GUI编程非常容易。 它使用声明性语法并提供动画支持。
在本文中,学习如何开始使用JavaFX来构建RIA。 下载并安装JavaFX SDK,安装JavaFX Eclipse插件,并通过创建示例应用程序来探索JavaFX的一些基本功能。
下载本文中使用的Login Application和Animated Circle示例的源代码。
请按照以下步骤下载并安装JavaFX SDK和JavaFX Eclipse插件。
Windows的默认安装位置是C:\ Program Files \ JavaFX \ javafx-sdk-version。
JavaFX Plugin Site
作为Name,输入http://javafx.com/downloads/eclipse-plugin/
作为需要从中安装插件的位置。 单击确定 。
单击下一步 。
如果将JavaFX SDK安装在非默认位置,则可能会提示您设置JAVAFX_HOME变量, 如图3所示。 如果不是由Eclipse插件安装创建的,则还需要创建一个名为JAVAFX_HOME的类路径变量。 将其指向JavaFX安装位置。
在本部分中,构建示例JavaFX应用程序以根据用户的密码验证用户,并允许他们登录系统(如果他们可以提供所需的凭据)。 授权成功后,用户将看到“欢迎”屏幕。 如果授权不成功,则Eclipse Console视图中的消息将提供失败详细信息。 您将使用JavaFX swing组件构建登录屏幕。 您可以下载 Login应用程序的源代码。
单击下一步 。
LoginApp
作为项目名称。 选择桌面配置文件。 这些选择如图5所示。 点击完成 。
Main
,然后单击Finish 。 login
的布尔变量,该变量维护用户的登录状态(上一次登录是否成功)。 声明字符串变量username
以便保留用户输入的用户名。 还有一个硬编码的系统用户test
,该用户只能登录到我们的应用程序。 var login = false;
var userName = "";
var systemUser = "test";
Login App
编辑要在舞台上显示的标题, 如图7所示。 将宽度和高度都设置为300
。 单击插入 ,这会将Scene
元素添加到舞台上。 Scene
元素就像一个绘图平台或曲面,用于渲染图形元素。 它具有一个包含子元素的content
变量。
Scene
添加一个javafx.scene.Group
元素,如清单2所示。 该组将充当您创建的其余控件的容器。 import javafx.scene.Group;
group
元素添加到content元素。 content: [
Group {
}
]
SwingLabel
类添加标签,如清单4所示。 import javafx.ext.swing.SwingLabel;
content
元素,如清单5所示。 content : [
SwingLabel {
text : "User Name :";
}
]
SwingTextField
类,如清单6所示。 import javafx.ext.swing.SwingTextField;
SwingLabel {
text : "User Name :";
},
SwingTextField {
text : bind userName with inverse;
columns : 10;
editable : true;
layoutX : 30;
layoutY : 20;
borderless : false;
selectOnFocus : true;
}
SwingButton
。 import javafx.ext.swing.SwingButton;
添加清单9中所示的代码,以在Text字段下面添加按钮。
SwingButton{
translateX: 50
translateY: 50
text: "Submit"
action: function(){
if((userName != systemUser)) {
println("Invalid UserName");
}
login = (userName == systemUser);
}
}
action
函数检查输入的userName
是否与系统用户名相同。 如果不是,该示例将打印出错误消息。 否则,结果将存储在登录布尔变量中。 到目前为止,您已经处理了登录失败的情况。 您需要使用登录变量的状态进入成功登录屏幕。 这需要if-else
语句。 添加if-else
子句,然后在else
子句中,首先添加一个包含内容对象的空组。 添加突出显示的代码,如清单10所示。
if-else
子句 content: bind if(not login)Group {
content: [
SwingLabel{
text: "User Name:"
},
SwingTextField {
text : bind userName with inverse;
columns : 10;
editable : true;
layoutX : 30;
layoutY : 20;
},
SwingButton{
translateX: 50
translateY: 50
text: "Submit"
action: function(){
if((userName != systemUser)) {
println("Invalid UserName");
}
login = (userName == systemUser);
}
}
]
}
else Group{
content: [
]
}
Text
类,如清单11所示。 Text
类 import javafx.scene.text.Text;
else
子句组元素的内容主体中。 Text {
x: 10 y: 30
content: "You have successfully logged in."
},
SwingButton{
translateX: 10
translateY: 50
text: "Log out"
action: function(){
userName = "";
login = false;
}
}
完整的代码如清单13所示。
package com.sample.login;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.text.Text;
import javafx.ext.swing.SwingLabel;
import javafx.ext.swing.SwingTextField;
import javafx.ext.swing.SwingButton;
var login = false;
var userName = "";
var systemUser = "test";
Stage {
title : "Login App"
scene: Scene {
width: 300
height: 300
content: bind if(not login) Group{
content: [
SwingLabel{
text: "User Name:"
},
SwingTextField {
text : bind userName with inverse;
columns : 10;
editable : true;
layoutX : 30;
layoutY : 20;
},
SwingButton{
translateX: 50
translateY: 50
text: "Submit"
action: function(){
if((userName != systemUser)) {
println("Invalid UserName");
}
login = (userName == systemUser);
}
}
]
}
else Group{
content: [
Text {
x: 10 y: 30
content: "You have successfully logged in."
},
SwingButton{
translateX: 10
translateY: 50
text: "Log out"
action: function(){
userName = "";
login = false;
}
}
]
}
}
}
在本节中,您将测试示例登录应用程序。 保存到目前为止所做的更改。
abc
并单击Submit 。 登录失败,因此您可以在控制台中看到错误消息。 test
并单击Submit 。 系统接受该用户名并成功登录, 如图9所示。 上面创建的LoginApp使用了桌面配置文件。 在本部分中,创建一个使用Mobile配置文件并在移动模拟器上运行的应用程序。 本示例探讨如何创建动画图形。 您还将渲染一个在不同时间间隔具有不同不透明度的圆。
AnimatedCircle
, 如图10所示。 选择移动配置文件。 点击完成 。
Main
作为名称,然后单击Finish 。 Animated Circle
作为标题。 其余的默认设置保持不变,然后单击插入 。 content[]
元素内的源编辑器。 在Insert Template对话框中,输入Color.BLUE
作为fill
属性, 如图11所示。 点击插入 。
将动画支持添加到圈子。 该示例逐步介绍了在不同时间间隔更改圆的不透明度。 您需要一个包含关键帧的时间线。 该示例有两个关键帧:一个在5秒钟内将圆的不透明度从0.0更改为0.5,另一个在接下来的10秒钟内将不透明度从0.5更改为1.0。
opacity
的变量。 var opacity = 1.0;
Circle {
opacity : bind opacity;
centerX: 100,
centerY: 100,
radius: 40,
TimeLine
元素。 在“片段”窗口中,选择“ 动画”选项卡以将其展开。 将TimeLine
元素拖到编辑器上。 在“插入模板”对话框中,输入5s
作为时间值, 如图14所示。 点击插入 。
图15显示了将TimeLine拖到编辑器后生成的代码。
canSkip
属性之后的Values
元素从KeyFrame对象中的Animations选项卡中canSkip
。 在“插入模板”对话框中,输入opacity
作为变量值, 如图16所示。 点击插入 。 在生成的代码中( 如图17所示),将不透明度值更改为0.5
。
KeyFrame
正下方添加另一个KeyFrame
,其时间变量为10秒,并且将Values
元素更改为1.0。 该代码应类似于图18 。 .play()
, 如图19所示。 在本文中,您了解了JavaFX以及如何使用它来快速构建GUI应用程序。 这些示例说明了如何使用Swing组件构建表单。 您还探讨了如何开发图形应用程序和添加动画支持。
翻译自: https://www.ibm.com/developerworks/java/library/wa-javafxapp/index.html