使用经过编译的 JavaFX Script 技术创建富 Internet 应用程序
2008-07-14 16:38
579 查看
By James L. Weaver, 2/29/08 |
这是一种简单而优雅的脚本编制语言,充分利用了 Java 平台的强大功能。进一步来讲,这些系列文章涵盖了经过编译的 JavaFX
Script,它经历了完整的开发周期。您可能已经了解到 JavaFX Script 有一个经过解释的版本,它实质上充当编译后版本的原型
JavaFX Script 是静态类型并且完全面向对象。
您将看到,使用 JavaFX Script 可以轻松地开发响应性的富图形用户界面(GUI)。它的一部分魅力在于,即使开发人员不具备深入的编程知识,他们也能够开发出图形内容来构成令人称奇的用户界面(UI)。
Java SE 6 Update N 是 Java Platform, Standard Edition 6 (Java SE 6) 的一些更新的名称,通常简写为 6uN,它实现了最新版 JVM* 的部署,并显著加快了 Java applets 和应用程序的启动速度。再加上 JavaFX Script 被编译为 JVM 字节码,因此可以为我们提供可快速部署、快速执行的图形化富客户机。
现在,您已经基本了解了 JavaFX 技术和 Java SE 6 Update N 的含义,让我们来查看一些经过编译的 JavaFX
Script 代码,这些代码要比典型的 Hello World 程序稍微复杂一些。通过这些代码,您将可以体验到创建包含 UI 组件和 2D
图形的经过编译的 JavaFX 程序是多么简单。下一小节将展示如何编译和运行示例程序。
目录
- | 获取 JavaFX Script 编译器 |
- | 编译并运行 HelloCompiledJavaFX 程序 |
- | 理解 HelloCompiledJavaFX 应用程序代码 |
- | 定义用户界面的声明性代码 |
- | 使用 Frame 类 |
- | 创建字符串字符 |
- | 使用布局部件 |
- | 处理事件并显示消息对话框 |
- | 在画布上绘制 |
- | 定义字体 |
- | 结束语 |
- | 更多信息 |
下载 最新版本的编译器。
将
archive.zip文件解压缩到系统中的一个目录。
设置
PATH环境变量,使其包含解压缩
archive.zip文件时使用的目录的
archive/openjfx-compiler/dist/bin子目录。
编译并运行 HelloCompiledJavaFX 程序
package语句,源代码必须位于目录名和包名相同的目录中。将程序保存到
mypackage目录中名为
HelloCompiledJavaFX.fx的文件中。要编译这个程序,将当前目录设置为
mypackage目录并执行
javafxc命令脚本,输入以下命令:
javafxc HelloCompiledJavaFX.fx |
javafx mypackage.HelloCompiledJavaFX |
图 1:应用程序的主窗口 |
图 2:消息对话框 |
代码示例 1
/* * HelloCompiledJavaFX.fx - A "Hello World" style, but slightly more * sophisticated, compiled JavaFX Script example * * Developed 2008 by James L. Weaver (jim.weaver at lat-inc.com) * to serve as a compiled JavaFX Script example. */ package mypackage; import javafx.ui.*; import javafx.ui.canvas.*; Frame { title: "Hello Rich Internet Applications!" width: 550 height: 200 background: Color.WHITE visible: true content: BorderPanel { top: FlowPanel { content: Button { text: "Click Me" action: function():Void { MessageDialog { title: "JavaFX Script Rocks!" // This string has a newline in the source code message: "JavaFX Script is Simple, Elegant, and Leverages the Power of Java" visible: true } } } } center: Canvas { content: Text { font: Font { faceName: "Sans Serif" style: FontStyle.BOLD size: 24 } x: 20 y: 40 stroke: Color.BLUE fill: Color.BLUE content: "JavaFX Script Makes RIA Development Easy" } } } } |
理解 HelloCompiledJavaFX 应用程序代码
多行注释 的开头是两个
/*字符,并使用相同的两个字符结束,但是顺序相反(
*/)。开始字符和结束字符之间的任何内容都将忽略掉。代码示例 1 的开始部分展示了一个多行注释的例子。
单行注释 以两个
//字符开始,这两个字符后的所有内容都将被忽略。示例代码 1 在接近中间的部分展示了一个单行注释的例子,为方便查看,下面再一次展示了这个例子:
// This string has a newline in the source code.
和 Java 技术相同,package 声明类似文件系统中的文件夹。它提供了一种按照逻辑组织应用程序的源代码文件的方法。本例中的包为
mypackage,它表示
HelloCompiledJavaFX.fx源代码位于名为
mypackage的文件夹中。包名可能由多个节点组成。例如,
com.sun.foo这个包名表示源代码文件位于名为
foo的文件夹中,后者位于名为
sun的文件夹,而
sun文件夹又位于 com 文件夹中。注意,包名通常以开发该应用程序的公司或组织的域名开头 —— 使用相反的顺序,以顶级域名开头,例如
com或
org。包的声明为可选内容,除了最平常的应用程序以外,其他程序应该使用包声明,这是一项最佳实践。如果使用包声明,那么包声明语句必须位于源代码的顶部,并且不能包含空白和注释。
继续利用您的 Java 编程语言知识,您将看到 JavaFX Script 语言也包含了 import 语句。JavaFX 程序通常使用由 JavaFX 代码(以及一些 Java 代码)组成的库。在本例中,每个导入语句表示某些 JavaFX 类的位置或包,
HelloCompiledJavaFX.fx文件其余部分的代码将依赖这些类把部件和图形输出到屏幕。导入语句可以使用星号 (*) 作为结束,表示程序可能使用了包中的任何一个类。一个替代方法是具体指定正在使用的每个类,如下面的示例所示:
import javafx.ui.Frame; |
package声明组织它们的源代码。对于具有不同
package语句的源代码文件,将使用
import语句表示包含在其中的类的使用。
定义用户界面的声明性代码
技术的一个令人兴奋的特性就是它能够以一种简单、一致、强大的声明性语法表示图形化用户界面(GUI)。声明性编程由单一的表达式组成,而过程性编程由多
个连续执行的表达式组成。JavaFX Script 同时支持这两种类型的编程,但是,在任何可能的情况下使用声明性语法是一项最佳实践。
代码示例 1 中的多数示例应用程序都是声明性的:由单个表达式组成。声明性表达式首先定义一个
Frame对象,后跟一个打开的花括号,在程序的最后一行以一个匹配的花括号结束。中间嵌套的内容是
Frame对象的属性,包括分配了
BorderPanel布局组件的
content属性,
BorderPanel是由 Java 平台的
BorderLayout管理的一个 GUI 组件。content 属性中嵌套了
BorderPanel部件的
top和
center属性,这两个属性分别分配了一个
FlowPanel布局部件和一个
Canvas部件。这种嵌套将一直继续下去,直到完全表达了 UI 的包含结构。
声明性代码将自动创建表达式中的每个 JavaFX 类的实例 —— 也称为对象。它还向新实例的属性分配值。例如,查看创建 Font 类实例的代码:
Font { faceName: "Sans Serif" style: FontStyle.BOLD size: 24 } |
Font类的实例并将值
Sans Serif分配给新
Font实例的
faceName属性。它还将
FontStyle.BOLD常量(静态属性)的值分配给
style属性,将
24分配给
size属性。注意,每个属性名后都紧跟一个冒号 (
:),这在 JavaFX 声明性语法中表示 “将右侧的表达式值分配给左侧的属性”。这些概念对于这个程序中的其他类也是同样的道理:
Frame、
BorderPanel、
FlowPanel、
Button、
MessageDialog、
Canvas和
Text。让我们分别查看一下这些类。
使用 Frame 类
Frame表示一个 GUI 窗口,它具有自己的边界并且可以在其中包含其他的 GUI 组件。
与大多数类一样,
Frame类具有一组属性。如代码示例 1 所示,
Frame部件的属性集包含以下几种:
title显示在窗口的标题栏。
height和
width属性以像素为单位,可以确定窗口的初始大小。
background属性指定
Frame的背景颜色。
visible属性控制
Frame对象是否显示在屏幕中。
content属性定义
Frame对象的内容。在本例中,
Frame对象将包含一个
BorderPanel布局部件,后者又包含了其他部件。
创建字符串字符
String,它由零个或多个字符串组成。如下面的
Frame对象的
title属性所示,
String字符的定义方式为使用双引号将一组字符括起:
title: "Hello Rich Internet Applications!" |
message: "JavaFX Script is Simple, Elegant, and Leverages the Power of Java" |
String字符括起。
使用布局部件
Script 使用了布局部件(一些 UI 组件),而不会要求您创建布局管理器的实例并将其与 UI 组件相关联,后者正是 Java
技术的做法。图 3 演示了这个应用程序中使用的布局策略。
图 3:确定了布局部件的主窗口 |
BorderPanel布局部件的行为与由 Java
BorderLayout管理器管理的 Java UI 容器的行为相同:UI 部件可以关联到
top、
left、
right、
bottom和
center属性。上、下、左、右区域只会占用放置各自部件所需的空间,而中心区域则占有剩余的空间。与 Java
BorderLayout管理器相同,放置在
BorderPanel中的部件将被放大到适合所放置区域的大小。
类似地,
FlowPanel与 Java
FlowLayout管理下的 Java UI 容器的行为相同:它允许其中的部件从左侧移动到右侧,如果需要的话还可以包含在
FlowPanel内。与 Java
FlowLayout管理器相同,放置在
FlowPanel中的部件将保持它们的默认大小,而不会向
BorderPanel中的部件那样被放大。
处理事件并显示消息对话框
Button类进行实例化:
Button { |
action属性的匿名函数,在本例中这样做将创建一个
MessageDialog类的实例。由于
visible属性为真,新的
MessageDialog实例将显示在屏幕中,并具有相应的标题和消息,如图 4 所示,为方便起见,它重复了图 1 的屏幕截图:
图 3:确定了布局部件的主窗口 |
图 4:消息对话框 |
在画布上绘制
Canvas有关的代码,需要注意
Canvas被分配给
BorderPanel的中心区域。您在前面已经看到,声明性代码用于在 UI 包含结构中表示部件。现在将使用声明性代码在
Canvas中绘制 2D 图形。您将使用
Text类在
Canvas上绘制文本,这是 JavaFX Script 提供的一个 2D 图形类。
x和
y属性表示文本的左上角的显示位置,以像素为单位。
Text类的
content属性包含将要绘制的字符串,而
font属性指定将要绘制的文本的外观。
Canvas { |
Font类。该类用于指定
Text对象的外观特征,将使用到
faceName、
style和
size属性。
结束语
JavaFX Script 可以轻松地开发响应性的跨平台富 GUI,而 Java SE 6 Update N 将解决跨平台问题并提高部署速度。
JavaFX Script 使您能够通过简单的声明性语法表示复杂的跨平台 GUI。您可以轻松地表示 GUI 部件、布局部件和 2D 图形。
JavaFX Script 是静态类型并且完全面向对象。
JavaFX Script 注释以及
package和
import语句与 Java 编程语言完全相同。
分配给属性的匿名函数负责处理事件,如
Button类的
action属性所示。
可以下载并使用最新版的 JavaFX Script 编译器编译并运行您的 JavaFX Script 程序。
* 在本网站中,术语 Java 虚拟机或 JVM 表示 Java 平台上的虚拟机。
更多信息
Java SE 6 Update N Early Access
Java SE 6 Update N New Plug-In
Java SE 6 Update N Java Quick Starter (JQS)
下载 JRE 5 或更高版本
下载 最新的编译器版本
James Weaver 的博客将帮助您成为 JavaFXpert
关于作者
相关文章推荐
- 使用 JavaFX Script 创建富应用程序
- 使用编译的 JavaFX Script 技术中的 UI 组件
- JavaScript使用面向对象的技术创建高级 Web 应用程序
- 使用 JavaFX 快速创建应用程序
- JavaScript:使用面向对象的技术创建高级 Web 应用程序(转)
- JavaScript: 使用面向对象的技术创建高级 Web 应用程序
- JavaScript使用面向对象的技术创建高级 Web 应用程序
- JavaScript使用面向对象的技术创建高级 Web 应用程序 (转)
- 使用面向对象的技术创建高级 Web 应用程序[转载]
- 使用面向对象的技术创建高级 Web 应用程序
- 使用面向对象的技术创建高级 Web 应用程序
- JavaScript使用面向对象的技术创建高级 Web 应用程序(转)
- 使用ARM DS-5 创建、编译和运行Linux简单Hello World应用程序(入门指导)
- JavaScript 使用面向对象的技术创建高级 Web 应用程序
- 使用面向对象的技术创建高级 Web 应用程序【转】
- 使用JavaScript面向对象的技术创建高级 Web 应用程序
- 使用面向对象的技术创建高级 Web 应用程序
- 使用面向对象的技术创建高级 Web 应用程序
- JavaScript使用面向对象的技术创建高级 Web 应用程序
- JavaScript: 使用面向对象的技术创建高级 Web 应用程序