Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 596

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 596

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 613

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 707

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 707

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 707

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 707

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/citiz68/public_html/javafxblogs/wp-includes/classes.php on line 730
JavaFX : JAVAFX技术

Oracle的Java规划

分类: JAVAFX技术, JavaFX新闻.
标签: , , ,

ORACLE已经完成了对SUN的收购,今天公布了对Sun各项业务的规划。总的来说,oracle将要实现软硬件一体化的整体解决方案。

Java的发展策略:

Java SE:

1)快速推出JDK SE 7, 它将包含很多新功能:提高开发者的效率,高性能,多核芯片的支持等。
2)HotSpot和JRockit将是策略性虚拟机:融合两者的最佳特性,管理和实时监控功能,在hypervisor中运行本地虚拟机代码,
多核NUMA架构的编译优化等。
3) 继续支持多种操作系统。

Java EE:

1)发展Java EE的参考实现(RI),进一步针对一些重要的方向,如开发标准的模块化,新的轻量级服务器配置,RIA和UI,脚本和动态语言以及Web Services等。
2)Glassfish将作为Java EE的RI,Weblogic将继续为企业级的应用服务器。
3) GlassFish将继续支持现有的发布方式。

Java ME:

1)统一JavaME和Java SE的API。
2)优化Java ME,包括启动和运行的性能,新的交互模式,电力消耗优化,在javaFX上的优化,移植到IP TV,blue Ray和其他嵌入设备。
3) 继续对运营商和设备厂家的二进制优化。

富互联网应用(Rich Internet Applications)JavaFX

1)扩展Java来提供前所未有的RIA体验。
2)面向(界面)设计的视觉组装。
3) 高效率的UI组件库。
4)跨设备的可移植性和用户交互模型,包括移动、桌面、电视以及其他设备。
5)无缝的与java,javascript以及html5的互操作。
6)实现和Oracle ADF/ADF Mobile互补

开发工具

1)NetBeans继续作为轻量级的Java IDE,重点在Java EE6,Java ME和脚本语言,增加在移动应用和动态脚本语言的关注,Hudson将作为开源的Build方案。
2)oracle的JDeveloper将继续成为Oracle的策略性的开发工具,主要是和fusion等中间件的集成。
3)继续对Eclipse支持和作贡献。

其他连接:
JavaFX Blog javaFX Guy博客 JavaFX Game

JavaFX Observation

Java SE 6 U18较大的性能改进

US Citizenship Application

Online Canadian Citizenship Test American Citizenship Test
UK British Citizenship Test

评论 (0) 2010年02月28日

Eclipse的JavaFX 1.2.1插件发布

分类: JAVAFX技术.
标签: , , ,

上周发布的JAVAFX 1.2.1的Eclipse插件可以下载了, 这对喜欢Eclipse的用户来说是件喜讯。一直以来,由Sun支持的NetBeans和IBM支持的Eclipse两大开源IDE互相学习,取长补短,目前看功能和水平都差不多了。我觉得IDE是个工具,用哪个都无所谓,只要自己用得顺手和习惯就行。唯一可惜的就是两者的插件互相不兼容,没法通用,造成不少麻烦。


JavaFX的“官方”IDE一直就是NetBeans,可以和JavaFX SDK一起下载。Eclipse是Sun兼顾的IDE,毕竟Eclipse的用户还是很多的。我想国内很多JAVA程序员都是用Eclipse的,所以JavaFX的eclipse插件对他们是很好的帮助。


详细信息和下载地址:http://javafx.com/docs/gettingstarted/eclipse-plugin/release-notes.jsp


其他连接:

JavaFX Gaming Examples
JavaFX Technology

British Citizenship Test for UK
Australian Citizenship Test

Citizenship test on iphone
US Citizenship Test Practise

iPhone App Experts


评论 (0) 2010年01月15日

介绍《JavaFX本质论》

分类: JAVAFX技术, JavaFX新闻.
标签: , ,

目前,关于JavaFX的书籍还比较少,英文版的JavaFX书主要有3本:James Weaver等著的《JavaFX Pro》,Jim Clarke等的《JavaFX:Developing RIA》,还有Gail Anderson夫妇的《Essential JavaFX》。中文版的书籍就更少了。最近,由Sun亚洲全球化中心翻译的《Essential JavaFX》已经由人民邮电出版社和英文版同步出版,中文译名《JavaFX本质论》。这是一本JavaFX学习者不可多得的中文参考书籍,因此给大家介绍一下。

作者Gail & Peter Anderson是Anderson Software Group, Inc的创始人。该公司主要从事软件工程专业人员的培训工作,该公司开发的教程被业界广泛采用。《JavaFX本质论》是按照培训技术人员的思路设计的,因此,读者可以根据该书的章节快速有效地学习JavaFX编程语言。Gail Anderson在写书的时候,还得到Sun公司Octavian Tanase和Richard Bair等JavaFX 核心团队的支持和帮助,因此书中的内容比较能体现JavaFX的设计精神和理念,书中涵盖的程序范例和技术细节均符合JavaFX 1.2 的标准规范。还值得一提的是,本书是由Sun公司位于北京的亚洲全球化中心翻译校对,除了译文忠实于原文之外,还使得本书更带有“准官方”的色彩。

本书面向的读者主要是已经有编程经验的开发人员(但不一定需要Java经验)。对于没有任何编程基础的读者,最好先读一些编程语言的教程,如Java,C++等。我觉得 JavaFX最有可能的读者应该是Java程序员。这不仅仅是因为JavaFX名字中包含了Java一词,其实JavaFX的实现技术也是基于Java的,并且可以直接调用Java代码。对于已经熟悉Java的程序员来说,阅读JavaFX的程序有点像在读Java语言的扩展模块。另外,对C++ 程序员来说,也应该不难理解JavaFX的语法和概念,毕竟Java的语法基本上从C++借鉴过来的。

在你已经熟悉或精通了一种编程语言之后,再学习新的语言,最需要了解的就是新语言的特点和语法特色。笔者觉得一种行之有效的方法就是先看写程序的例子(如HelloWorld等),以便了解新语言的语法风格。有了这个感性认识之后,再看具体的语言介绍就会容易理解了。《JavaFX本质论》就是按照这样结构来安排的,书中的所有程序例子都可以从网上下载,读者可以一边阅读一边看示范程序的运行,因此非常适合JavaFX初学者。中文版还把书中的代码注释都翻译了,更加易读。

第一章主要介绍JavaFX SDK下载和NetBeans IDE。对于熟悉JDK和IDE(Netbeans或Eclipse)的读者,可以很快的构建自己的JavaFX开发环境。

第二章是本书的引子,通过一个JavaFX吉他调音器(GuitarTuner)例程,让读者体验JavaFX的风味,并且介绍一些重要的概念,如声明式结构,JavaFX场景图(Scene Graph),绑定和动画等。这章的目的是让读者迅速了解到JavaFX可以实现什么功能,以及如何实现这些功能的。通过前两章的阅读,读者已经可在NetBeans IDE中运行一个较完整的JavaFX应用。

第三章是语法介绍,包括变量类型、运算符表达式,函数、类和对象、触发器等基本语法元素。对Java程序员来说,可以重点关注JavaFX 和Java的语法异同点。本章也是可以较快跳过的章节,可以作为今后阅读和编写JavaFX程序时的参考文档。

第四和第五章主要是描述如何用JavaFX的图形对象和控件来构造用户界面(UI)。这是JavaFX特有部分,在编程中广泛应用,因此需要仔细阅读。虽然JavaFX的UI里面可以看到不少Java SWING和Java 2D的痕迹,JavaFX甚至还提供了Swing的控件Wrapper,在使用上面JavaFX还是带来了简洁和便利等优点。

第六章深入讲解了一个JavaFX的项目:Piano(钢琴)。读者可以领略到JavaFX的强大功能,如各种视觉效果(渐变、阴影等)、时间轴、动态布局和序列操作等等。 这个程序还展现了JavaFX如何直接调用Java的功能来丰富应用程序。

第七章是关于动画功能的详述。动画可以说是JavaFX区别于Java的一个重要特性。常用的动画感念和技巧,如时间轴(Timeline), 关键帧(Keyframe), 动画插值(interpolation), 路径动画(path)和过渡切换( transition)等。

第八章是介绍图像功能,主要包括Image和ImageView两个类的用法,以及各种图像效果的解释和演示。本章的例程也比较有意思,如图像墙,3D照片幻灯等。

第九章内容是Web服务,即JavaFX的客户端如何和服务器进行数据交互。在RIA中,通过Internet获取数据几乎是必需的功能。本章内容涵盖了PullParser和HttpRequest这两个主要的类,并通过例程说明如何调用Flickr的Web服务以获取相片数据。

第十章讲述了JavaFX的移动(Mobile)应用。NetBeans提供了移动仿真器(emulator),可以调试JavaFX Mobile的应用。本章所介绍的移动应用开发涉及了常见的问题,如运行环境检测、处理移动设备的屏幕转向(象iphone那种)、键盘输入等。书中还介绍了如何把桌面版的JavaFX程序修改成为JavaFX Mobile的程序。

我觉得《JavaFX本质论》是非常适合初学者的一本入门书籍,读者可以循序渐进地学习JavaFX各个方面的功能特性。对于已经了解JavaFX的程序员,也是非常好的参考手册。本书的样章电子版可以在这里阅读:

第5 章 用户界面组件 http://images.china-pub.com/ebook195001-200000/195879/ch05.pdf

第7章 动画 http://images.china-pub.com/ebook195001-200000/195879/ch07.pdf

可在各大网上书店购买,如: http://www.china-pub.com/195879

源程序下载可从作者网站(英文)下载:http://www.asgteach.com/books/javafxbook.html

评论 (0) 2009年12月01日

JavaFX常用技巧( How-Tos )

分类: JAVAFX技术, JavaFX技巧, JavaFX编程.
标签: ,

Javafx.com中发布了一组实用的编程技巧例子,非常有参考意义。内容从最基础的概念到示范程序都有,另外还按照常见的API调用分类说明,对入门、初级和中级JavaFX学习者都是很好的借鉴。

链接如下:


JavaFX How-Tos (英文)

比较重要或者有意思的内容有:

1)绑定(binding)

2)基础UI(Basic UI)

3)视觉效果(Visual Appeal)

4) 近阶内容(transition切换等)

5)JavaFX和Java,Javascript,SWING交互



本人的Pac-Man和WishTree程序被收录在Game应用程序范例里面,实在感到荣幸。




Other links:


iPhone App Canada Citizen Test
Canadian Citizenship Test for iPhone
Canadian Citizen Exam
iPhone App iCitizenship Canada

评论 (0) 2009年11月14日

离线启动JavaFX程序

分类: JAVAFX技术.
标签: ,

JavaFX程序的启动有3种方式,一种是独立应用程序(Standalone),另一种是使用JNLP的Java Web Start方式,第三种是Applet方式。应为JavaFX是基于java的运行环境的技术,因此上述三种方式分别对应Java的独立程序、JWS和Applet方式。如果你能理解Java的的这三种启动方式,就不难理解如何启动JavaFX的应用了。

1。独立应用程序

在Java中,我们用javac来编译,然后用命令行

java -classpath <path> <class_name>

来启动程序,或者是jar的方式:

java -jar <jar-file>

在JavaFX中,可以使用javafxc编译,然后采用类似的命令启动程序:

javafx -classpath <path> <class_name>

通常在NetBeans中都是编译成jar文件,所以这种方式更常用:

javafx -jar <jar-file>

2。JNLP的Java Web Start方式。

Java Web Start的方式是一种启动Java程序的方式,它可以使应用程序通过Web浏览器来部署和启动。JavaFX在编译后本质上就是Java代码,因此,顺理成章可以通过JWS的方式下载和启动。NetBeans编译后会生成一个<项目名>.jnlp文件,如果需要部署的话,往往要修改里面的codebase属性。例如,如果你的JNLP文件要部署在Web Server的URL为 http://www.mywebsite.com/myprog/myproject.jnlp,你的codebase应该写成

<jnlp spec=”1.0+” codebase=”http://www.mywebsite.com/myprog/” href=”myproject.jnlp”>

如果你的程序是本地运行(脱离NetBeans环境),假定目录在C:\myfolder\myprog\中,可以写成这样,注意路径不要有C:\这样的盘符:

<jnlp spec=”1.0+” codebase=”file:///myfolder/myprog/” href=”myproject.jnlp”>

这样,在Windows中双击 myproject.jnlp 文件就可以启动文件了。这对于离线状态下运行程序比较有用。(当然,需要有JavaFX的Runtime环境支持才行。)
3. Applet方式

JavaFX程序还可以写成Applet的方式。Applet可以说是Java最原始的启动方式,启动代码可以参考NB生成的 <项目名>.html文件

相关文章:

JavaFX技巧:Java调用JavaFX例子

在JavaFX中的菜单

用纯Java代码调用JavaFX的功能
其它:

NASCAR Diecast Cars Collections

Immigration Visa for Spouse Wife Husband through Marriage NASCAR Diecast Car Dale Earnhardt

US Citizenship Test Sample Questions

Best Online US Citizenship Practice Test

Online US Citizenship Application

评论 (1) 2009年09月25日

JavaFX的菜单Menu

分类: JAVAFX技术.
标签: , , ,

在JavaFX的API中没有提供菜单(menu)的控件。可能是由于JavaFX设计者们觉得在RIA有没有菜单不重要。但实际中,开发人员还是常常询问如何在JavaFX实现菜单功能,于是Henry决定写个JavaFX菜单的例子(更多的例子可以参考 JavaFX编程博客 http://www.javafxblogs.com)。
JavaFX最然没有直接提供Menu的功能(注:javafxblogs.com),但是提供了一个SWING组件的封装类javafx.ext.swing.SwingComponent 。这个类可以把SWING的组件转化成JavaFX的节点(node)。
javafx blog
javafx blog

在上述代码中,我们先用构建一套标准的SWING菜单条(menu bar,JavaFX教程 http://www.javafxblogs.com),每个菜单条包含2个菜单项。这些都是标准Java SE中的功能,就不多解释了。接下来我们用以下语句来创建一个SwingComponent实例, 把SWING的菜单条包容进去:

var fxMenuBar : SwingComponent = SwingComponent.wrap(menuBar);

下面3行代码是把菜单条定位在窗口的上方:

fxMenuBar.width = w;
fxMenuBar.layoutX=0;
fxMenuBar.layoutY=0;

在Stage类中,我们可以看到fxMenuBar就像不同的JavaFX节点一样使用。由于窗口式可以调整大小的,因此我们需要一些代码来保证菜单条和窗口等宽。为了实现这点,我们增加了一个trigger,把窗口宽度的变化反映到菜单条中,变量w的trigger如下:

var w : Number = 480 on replace { fxMenuBar.width = w ; };

实际的绑定是通过这句类完成的,注意这里的双向绑定的用法:

Stage {
 ...
    width: bind w with inverse
 ...
}

下面是程序的截图,支持快捷键Alt+1,2,3,4来激活菜单项目:

相关文章:

SWING中如何使用JavaFX的组件

纯Java代码调用JavaFX的功能

NASCAR Die-cast

Free Online Canada Citizenship Practice Exam Questions on citizenship appliation

评论 (2) 2009年07月28日

在SWING中使用JavaFX的组件

分类: JAVAFX技术, JavaFX技巧.
标签: , ,

在文中注明:转自 http://www.javafxblogs.com 作者:Henry Zhang,即可获得授权转载.


自从JavaFX推出以来,如何在Java中调用JavaFX的功能就是个程序员常常讨论的问题。本人的文章用纯Java代码调用JavaFX的功能JavaFX和Java之间的互操作性对此作过专题讨论。在开源项目JFXtras最近

JavaFX的代码,只有了解它的作用即可: ( 转自http://www.javafxblogs.com 作者:Henry Zhang )

/*
 * MyScene.fx     http://www.javafxblogs.com
 * @author  Henry Zhang
 */

package swingtest;

import javafx.scene.Scene;
import javafx.scene.text.*;
import javafx.scene.paint.*;
import javafx.scene.shape.Rectangle;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;

def w = 500;
def h = 400;

public class MyScene extends Scene {
    var xx = w / 3;
    var yy = h / 2;
    var rotate = 0;
    var text = "";
    var tl = Timeline {
      repeatCount: Timeline.INDEFINITE
      keyFrames : [
        KeyFrame {
          time: 70ms
          action: function() {
             text = JavaFXToSwingTest.tf.getText();
             rotate = (rotate+5) mod 360;
          }
        }
      ]
     }

     override var content = [
        Rectangle {
            width: w, height: h
            fill: Color.BLUE
        },
        Text {
            font : Font {
                    size: 24
                   }
            layoutX: bind  xx
            layoutY: bind yy
            rotate: bind rotate
            content: bind text
            fill: Color.YELLOW
        }
    ];

    init { tl.play(); }
}


在文中注明:作者: Henry Zhang 转自 http://www.javafxblogs.com ,即可获得授权转载


在上面代码MyScene.fx中, 我们定义了一个Timeline实例来播放动画,在动画中,我们不断的使一行文本在旋转。每隔70ms,都会触发一次旋转角度的变化(每次5度)。为了演示如何在JavaFX和Java中交互数据,我们在每次更新时,从Java的静态变量中获取数据,代码如下:


text = JavaFXToSwingTest.tf.getText();


虽然这不是最佳的一种做法,但是我们暂时写成这样,使得不熟悉JavaFX的读者也能容易理解。稍后我们还会讨论这点。当我们完成了MyScene类后,可以开始写Java的主程序了,这是个标准的SWING程序JavaFXToSwingTest.java代码如下: ( 作者: Henry Zhang 转自 http://www.javafxblogs.com


package swingtest;

/**
 * JavaFXToSwingTest.java     http://www.javafxblogs.com
 * @author Henry Zhang
 */
import java.awt.*;
import javax.swing.*;
import org.jfxtras.scene.SceneToJComponent;

public class JavaFXToSwingTest extends JFrame {

  public static JTextField tf = new JTextField("JavaFX for SWING");

  public JavaFXToSwingTest() {
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("JavaFX in SWING Test");

    Container container = getContentPane();
    container.setLayout(new BorderLayout());

    String sceneClass = "swingtest.MyScene";
    JComponent myScene = SceneToJComponent.loadScene(sceneClass);

    JLabel label = new JLabel(" Below is a JavaFX Animation: ");
    container.add(label, BorderLayout.NORTH);
    container.add(myScene, BorderLayout.CENTER);

    JPanel p = new JPanel();
    p.setLayout(new FlowLayout());

    tf.setColumns(28);
    p.add(tf);
    p.add(new JButton("SWING Button"));

    container.add(p, BorderLayout.SOUTH);
    pack();
  }

  public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(
      new Runnable() {
        public void run() {
          new JavaFXToSwingTest().setVisible(true);
        }
      });
  }
}


对大多数Java/Swing的程序员来说,上述代码应该是很容易理解的。我们通过 BorderLayoutFlowLayout在Swing的窗口(JFrame)中布置了一些图形控件。有2行代码是和加载JavaFX的Scene相关的:

    String sceneClass = "swingtest.MyScene";
    JComponent myScene = SceneToJComponent.loadScene(sceneClass);


其中SceneToJComponent类是从JFXtras项目中来的。它提供了loadScene()的方法,可以把JavaFX的Scene类加载到一个JComponent对象中, 从而可以被Swing程序使用。运行这个程序,你可以看到一行文本”JavaFX for SWING”在窗口中央旋转。如果你在输入框中输入新的句子,你会发现旋转的文字也发生了改变。你可以点击以下截图来启动一个Java Web Start的演示程序(JDK1.5以上),或者可以点击这里来观看演示的视频(需要有Windows Media Player)。


讨论

1) 在上述程序中,我们用JavaFX的代码去轮询Java的变量值,实际中这会损失比较多的性能,所以我们可以从Java代码中主动把数据变化通知JavaFX。这需要一种从Java调用javafx的技巧,可以参见本人文章:用Java代码调用JavaFX的功能http://www.javafxblogs.com/java-call-javafx-code/).


2) 在Swing程序中调用JavaFX是可行的,那么应该怎样编译和运行这样的程序呢。其实,JavaFX的功能也就是一些jar文件,因此和Java的结合方式还是比较简单的。编译的方法主要有两种,一种就是用JavaFX 的编译器javafxc来编译Java和JavaFX的代码。第二种就是用javafxc编译JavaFX代码,用javac编译java代码。运行程序的时候,我们可以选择javafxjava命令即可,可以参见本人文章:JavaFX技巧:纯Java代码调用JavaFX的例子的详细说明。


如果有什么问题,欢迎留言讨论。


评论 (0) 2009年07月06日

JavaFX 1.2 程序迁移指南

分类: JAVAFX技术, JavaFX编程.
标签: , , ,

javafxblogs.com Rss_google Rss_zhuaxia Rss_xianguo


本文系经原作者Stephen Chin授权翻译,英文原文:The Definitive 1.2 Migration Guide,为方便起见,英文原文的副本也可参见本站转载。有关代码迁移和JavaFX 1.2新特性内容,还可以参考JavaFX网站的文章,或者本站文章JavaFX 1.2的新特性。以下译文中的红字部分为译者加注。



本文包含了从JavaFX 1.1迁移程序到JavaFX1.2最常见的变化,例如如语言本身、功能以及API的改变。如果你发现本文没有提到的变化,请在评论中留言。


基本原则

1) JavaFX 1.2 的二进制不兼容性:对于原来的jar文件或者其它第三方的JavaFX库,如JFXtras,必须经过重新编译才能在和JavaFX 1.2的代码兼容,否则会有编译错误。JFXtras将发布基于JavaFX 1.2的更新,新的版本就快就绪了。

2)内部的API将不能用了,如果你的代码包含了impl_或者sun.com的包,你的代码肯定需要修改。

3) 支持Linux和Solaris, 这是应该说是个新功能,这样你可以对用户自豪的宣称支持Linux。译者注:这里的Solaris应指OpenSolaris。


语言上的变化 JavaFX教程、实例、Demo

1)嵌套的块语句中不可以再有变量屏蔽(Shadowing)。原来可以有同名的变量分别处于内层和外层的块语句中,在内层的语句中的变量可以覆盖外层的同名变量。在JavaFX 1.2种,需要修改变量的名字来避免重名。

2)用mixin代替多类继承性。JAVAFX不再支持多类继承性,但是你可以继承一个类和多个mixin类。Mixin就像java中的interface,不同的是它可以有变量和已实现的方法,使得所有子类都可以使用。这点需要的修改也不多,只需要把原来多继承的类加上mixin关键字即可,如:

public mixin class Resizable { /* variables and functions here */ }

译者注:mixin也可以理解成可以多继承的抽象类(abstract class)

3) 在Sequence中,需要用逗号来分隔元素(除了那些用花括号结束元素)。这有点不方便,但实际上是件好事,因为可以避免以前很难追查的语言陷阱。JavaFX 1.2的新特性


Node类的变化 JavaFX编程实例

1)Node.boundsInScene 属性没有了,主要是性能方面的原因,好在有个容易替换且功能相同的调用:

node.localToScene(node.boundsInLocal)


2) Node.focusable 变为 Node.focusTraversable,虽是很小的API变化,但你应知道这点以免碰上编译错误。这是有关focus功能修正的一部分:当某个Node可见(visible)、可聚焦遍历(focusTravserable)并且没被禁用时,可以得到聚焦。(key listener将不再需要)

3) CustomNode.create() 将在 init 块之前调用,原来的方式是create()方法调用在init之后,在postinit之前。既然现在的调用在init之前,那么需要注意的是变量初始化的顺序,可能需要调整一些代码。

4) SwingControl.enabled -> Node.disable 这是一个在Node类中新的标志,统一地控制启用和禁用(enable/disable)。与之矛盾的SwingControl.enabled变量已经去掉了。

5) Rectangle2D -> Bounds 所有Rectangle2D的引用已经改为javafx.geometry.Bounds类了,在代码中可能会产生连锁反应。升级到JavaFX 1.2的简便方法


Layout类的变化 JavaFX Demo Game

1) min/max/pref -> getters 所有Resizable类的属性 (minimumWidth, minimumHeight, maximumWidth, maximumHeight, preferredWidth, preferredHeight) 已被替换为getter函数(getMinWidth, getMinHeight, getMaxWidth, getMaxHeight, getPrefWidth, getPrefHeight respectively)。其中 prefWidth/Height 函数可以代一个额外的参数,即在另一维度的空间大小。在高/宽有约束的layout中,如Flows,会非常有用,但也可以用-1来忽略该参数。

2) impl_layoutX/Y -> layoutX/Y 方法impl_layoutX和impl_layoutY正式替换为layoutX和layoutY变量。建议你使用这组变量来移动node到某个位置,这比translateX/Y要好。

3) impl_requestLayout() -> requestLayout()。 requestLayout 函数类似地从内部转为公开的API.

4) impl_layout -> doLayout()。 原来是用函数类设置layout,现在改为覆盖Parent.doLayout().

5) 增加了Panel类的声明式Layout。如果你在寻找功能上替代Container的方法,可以看看新的Panel类,它可以声明式设置layout,而且,它还能够通过变量覆盖min/max/pref缺省值,从而不用产生Container的子类.

6) Container中的新函数帮助实现布局(layout)。Container类里面有很多新函数,使得很容易来使用新的布局系统。切记要先完全读一遍,因为这样可以使你节约时间,同时可以遵循布局的最佳实践。

7) 不同的变换(transformation)顺序。过去transforms[]变量可让你在layoutBounds中使用变换,而scaleX/translateX/rotate等可以作用在布局之后. 现在transforms[]和transformation变量都统一在布局之后进行计算。


Skin/Control的变化: JavaFX技术应用编程交流

1) Skin.scene -> Skin.node。这个属性名称的变化可以减少易混淆的Scene类所带来的困惑。

2)去掉了Skin.computeXXX的方法。曾经有过一系列的computePreferredWidth/Height等方法,现在可直接用getPrefWidth/Height等函数,参见上文提到的Resizable类。


3)Skin成为抽象类。需要你实现contains和intersects方法。你可以使用新的JFXtras中的AbstractSkin类,或使用以下样板代码:

override function contains(localX:Number, localY:Number):Boolean {
    return node.contains(localX, localY);
}   

override function intersects(localX:Number, localY:Number,
      localWidth:Number, localHeight:Number):Boolean {
    return node.intersects(localX, localY, localWidth, localHeight);
}


4)新的行为(Behavior)类。这个类可以和Control及Skin一起使用来提供可重用的行为。

5)TextBox.text -> rawText, TextBox.value -> text。TextBox类现在重新调整了,text变为rawText,意义不变.


异步处理的变化: JavaFX Guy的博客
1) RemoteTextDocument类没有了。直接用HttpRequest类替代. 译者注:对于原来和后台Server交互的程序要小心这个变化,代码需要调整。

2) AbstractAsyncOperation类没有了。用新的任务基础设施来替代后台Java线程的通信。


动画(Animation)的变化: JavaFX教程、例子、编程论坛

1) Transition.interpolate -> Transition.interpolator。属性名称的改变,使得interpolate标志具有新的含义:可以成为是否做插值运算的开关。

2)Transition现在是继承Timeline类。这是个受欢迎的修改,使得Transitions很容易与Timelines一起使用。因为这个变化,ParallelTransition和SequentialTransition类现在可以有一个sequence保存的Timeline实例。 译者注:这个变化比较有意义,因为原来的Transition也可以作为动画的一种机制,容易令人糊涂。

译者注:以下两点从javafx.com中摘录翻译。

3)KeyFrame中不再提供timelines变量,但是可以用ParallelTransition和SequentialTransition这两个类来实现同样的功能。

4)Transition类中的timelineDirty变量由markDirty()方法替代。


和Java相同的函数: JavaFX Discussion Blog

1)java.lang.Math -> javafx.util.Math。新的JavaFX数学函数库, 使用JavaFX数学库的好处是可以在移动设备上应用(包括pow, log, 等)。

2)java.lang.Properties -> javafx.util.Properties。和Java相似的又一个类,但是可以移植到移动设备上。但需要注意的是,JavaFX的属性文件和Java属性文件格式不一致。


CSS支持的变化:

1)CSS 更新的缺陷(RT-4817)。样式(Stylesheet)的更新不再影响新增的Nodes。同时,你可以强制stylesheet的更新,方法如下:

def senators = bind model.senators on replace {
    delete sceneRef.stylesheets;
    sceneRef.stylesheets = "{__DIR__}styles.css";
}


2) CheckBoxSkin.textFill 不接受样式(RT-4819)。选项标志本身可以使用你所设置的样式(style),但是文本却不行。现在变通的做法是创建没有文本的checkbox,然后在旁边加上一个具有样式和事件处理机制的文本接点(text node)。

3) 不能从CSS中更新control中的skin属性 (RT-4820) 。这曾经是另一个skin支持上的bug。现在可以在代码中实现了。


Production Suite: 作者Henry Zhang的JavaFX技术博客

1) UiStub -> FXDNode。UiStub类现用FXDNode替代了, 增加了更多的功能,包括后台加载(backgroundLoading)和临时替代图像(placeholder images)。 译者注:以下代码示例来自javafx.com:

Scene {
  content: FXDNode {
     url: "{__DIR__}mygraphics.fxz"
     backgroundLoading: true
     placeholder: Text { x: 10 y: 10 content: "Loading graphics ..."}
   }
}


其它:
1) Image.fromBufferedImage()取消了。功能移至SwingUtils.toFXImage()。要记住的是,使用这个函数会在移植代码到移动设备时受到限制。

2) Color.fromAWTColor()取消了。这又是一个AWT痕迹的销除。JavaFX的Color类应该是非常完善的了,所以没有什么理由我们还要继续使用AWT的色彩体系。

3) Duration.toDate没有了。据我所知,应该没有相应的函数,但是我们总是可以获取duration的整数值然后直接操作它。

4) Affine类中不同的变量名称。如果你用到了Affine类, 你的代码很可能需要修改了,因为变量名称换成了更有说明性的方法名,但是功能还是一样的。


评论 (0) 2009年06月14日