本文提供了JavaFX Mobile开发的初学者指南但是因为所有的JavaFX开发都是依赖于相同的SDK和工具所以也很容易大体上理解JavaFXJavaFX SDK 和它的开发工具为开发JavaFX Mobile应用程序提供了移动模拟而不是提供了一个单独的JavaFX Mobile SDK来自Sun的Java Swing小组的Joshua Marinacci在他最近所写的博客中提到There is no JavaFX Mobile There is only JavaFX
Java在移动设备上的普遍存在性让write once run anywhere (WORA)前提很难在随之而来的成百上千的移动设备屏幕上遵守随着JavaFX Mobile 的发布Java社区就有了一种工具来打击这种设备UI支离破碎的状况
JavaFX的语法及与Java的配合
JavaFX 是由JavaFX Script和JavaFX Mobile组成的一种产品构架JavaFX Script(简称JavaFX)是一种脚本语言旨在提供了更加丰富的用户界面而且顾名思义JavaFX Mobile是 JavaFX 移动平台
JavaFX Script使用了类似JavaScript 和 Scalar Vector Graphics (SVG)一种声明语法例如这里有JavaFX 代码(没有 imports)是为了创建一个小的hello world类型的窗口如Figure Figure Figure 所示
Stage {
title: Cool Running
width:
height:
scene: Scene {
content: Text {
font: Font {
size:
}
x:
y:
fill: ColorGREEN
content: JavaFX is cool
}
}
}
如你所看到的JavaFX与Java和/或JavaScript有相似之处但也不尽相同
JavaFX的声明风格对比于Java Swing的编程风格是非常明显的以下的Swing代码(还是没有imports)创建和以上JavaFX例子相同的hello world窗口
public class Main {
public static void main(String[] args) {
JFrame aFrame = new JFrame(Cool Running);
aFramesetSize( );
JPanel content = new JPanel();
contentsetLayout(new BorderLayout( ));
contentsetBackground(ColorWHITE);
JLabel aLabel = new JLabel(Swing is cool);
aLabelsetFont(new Font(null FontPLAIN ));
aLabelsetForeground(ColorGREEN);
contentadd(aLabel BorderLayoutCENTER);
aFramesetContentPane(content);
aFramesetVisible(true);
aFrame
setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
}
注意Swing的必要特征(如一行一行的陈述控制流)这些事用于传统的Java UI开发Figure 显示了Java Swing代码的结果
如上所述JavaFX既不是Java也不是JavaScript但是JavaFX脚本可以调用Java类或是被Java类调用例如在接下来的决定窗口大小的JavaFX 脚本Stage对象的大小使用标准的Java Math类重新写入了
var i = ;
var j = ;
Stage {
title: Cool Running
width: javalangMathmax(i j)
height:
scene: Scene {
Sun公司宣称JavaFX改变现有的Java代码的能力是与其他RIA技术
如Adobe Flex
相比之下的优势之一
另外
JavaFX Script为构建任何应用程序提供了一个平台
它被Sun公司定义的目的是用在UI开发而不是用在商业或是后端组件
JavaFX Mobile构架
JavaFX应用程序依赖于运行在Java Virtual Machine (JVM)之上的JavaFX runtime对于移动应用程序JavaFX运行在Java ME JVM(参见Figure 和 Figure )上
目前的JavaFX API被分成两类的API元素common 和desktop这些类别叫做profiles而且它们所包含的元素可以在他们的profile中支持各种各样的UI需求和平台能力Common profile提供了很多同时支持桌面和移动设备的类换句话说它为所有运行在JVM(Java ME或Java SE JVM)上的平台提供了最低的普通标准的UIDesktop profile提供了更先进的能力以支持更大功能更丰富的平台
要创建需要所有形式的要素的应用程序开发者应该保留common profile要计划部署一个桌面平台或是一个普通的桌面浏览器的开发者可以选择用desktop profile提供的API来加强他们的应用程序
设备支持和应用程序配置
所以哪些设备支持JavaFX Mobile并且怎样让你的应用程序来部署这些设备呢?目前市场上没有应用JavaFX的产品但是在JavaFX Mobile推出的时候Sun公司向很多设备制造商(包括LGSprintSony Ericcson)宣称已经致力于在不久的将来提供JavaFX功能的产品
虽然在具体JavaFX设备的细节上的问题此刻还很模糊但是Sun公司已经明确表示JavaFX不是为所有移动设备提供的因为一个支持Java ME的MIDP/CLDC设备并不意味着它最后也支持JavaFXJavaFX是针对那些符合Mobile Service Architecture (MSA) 平台规格(JSR )的设备这就意味着除了MIDP/CLDC JavaFX设备必须支持有智能手机特性的APIs这些包括个人信息管理(PIM)无线通讯D图形和移动多媒体
至于JavaFX 应用程序如何部署到设备上本质上有两种选择都是Java ME开发者常见的
把它嵌入到设备上
把它(overtheair)发送到设备上
因为JavaFX在有MSA 的移动设备上的JavaME之上运行各种机构应该充分利用现有的Java ME基础设施和部署机制
构建一个JavaFX Mobile 应用程序
现在你知道什么是JavaFX Mobile了那么你怎样构建一个JavaFX Mobile应用程序呢?这一节将说到JavaFX Mobile开发的初学者指南它将解释如何获得所需的技术如何去建立一个环境还有如何开发并运行Hello World应用程序(以上所显示的)
JavaFX程序可以正式构建在Windows和Mac OS 平台上Sun公司没有提供Linux产品但是开发者已经找到一个方法在Linux用NetBeans Plugin来开发 JavaFX 程序这次讨论的最重要的就是JavaFX Mobile运行时间和模拟器这次只为Windows 平台提供
有关Windows和Mac OS 的系统需求的具体细节可以参看 site你必须有一个相对较新的JDK(Windows至少需要版本更新而Mac OS至少需要的是版本更新的)
除了基本的Java环境你还需要JavaFX SDK(安装指南参看)下载安装程序对于Windows版本大约是MB而Mac OS是MB当安装SDK时如果相应的Java SDK环境无法找到该安装可以是你通过一些步骤来安装Java SDK(参见Figure 看一下在Windows栏上的JavaFX SDK安装)
用JavaFX工作
JavaFX SDK提供了一系列的命令行工具来进行编译运行和测试JavaFX 程序也为运行和测试JavaFX Mobile程序提供了一个带有SDK的移动设备模拟器
Javafxc工具与标准的javacexe工具用法相同编译器获得JavaFX 源代码(代码保存在fx文件中)并且把它们编译到在类(class files)中的Java 字节代码Figure 显示了如何编译先前讨论的Hello World JavaFX 代码——之后它被保存在叫Testfx的文件中——使用javafxcexe而Figure 显示了如何使用javafxexe执行它
在bin目录中提供的是JavaFX包和文件工具packaging tool (javafxpackagerexe)是移动开发者比较感兴趣的因为它提供了创建一个为部署移动设备或是模拟器的mobileready package的方法但是packaging tool也能用于创建browserready或是Web Start程序通过JavaFX代码
为了给移动设备或是模拟器部署创建Java Application Descriptor (JAD)和JAR文件你必须至少给javafxpackager工具提供fx文件源代码的位置(它没有被编译为class文件)和主要类的名字或是为程序启动point class
默认情况下javafxpackager为浏览器或是Web Start部署创建了一套部署文件为了创建移动部署的JAD和JAR文件你必须也要在命令行需求中使用–p mobile选项–p代表profile而且你可以再移动或是桌面选项上显示此开关
这里是整个的来自Testfx 文件(本例子中的位置在c:\jfx 文件夹)的javafxpackager命令来创建一个mobileready程序
javafxpackager src c:\jfx appClass Test p mobile d c:\jfx\dist
–src选项指定JavaFX script代码的来源appClass指定了主要类的名字而可选的–d选项指定了输出的目的地(the JAD 和JAR files)结果参见Figure
接下来没有–p mobile选项(或是通过指定的–p desktop)javafxpackager制作了HTMLJAR和JNLP文件使用于browser 或是Web Start执行如Figure 所示
随着Windows版本的JavaFX SDK是一个模拟器来测试程序你可以在位于JavaFX SDK安装目录中的 /emulator/bin次文件夹中的找到一个emulatorexe为了测试javafxpackager制作的JavaFX JAD/JAR文件在仿真器工具上调用JAD文件使用–Xdescriptor:选项来指定JAD文件来执行见Figure
除了工具和模拟器JavaFX SDK还带有示例程序文件当然还有JavaFX库和API