`
javafxguy
  • 浏览: 151154 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

JavaFX 1.2 程序代码迁移指南

阅读更多

 加入JavaFX圈子     javafxblogs.com Rss_google Rss_zhuaxia Rss_xianguo   

 

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

 

 

本文包含了从JavaFX 1.1迁移程序到JavaFX1.2最常见的变化,例如如语言本身、功能以及API的改变。如果你发现本文没有提到的变化,请在评论中留言。 (本文同步发布于:http://www.javafxblogs.com  JavaFX 1.2 程序迁移指南)

 

基本原则

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相同的函数:
1)java.lang.Math -> javafx.util.Math。新的JavaFX数学函数库, 使用JavaFX数学库的好处是可以在移动设备上应用(包括pow, log, 等)。
2)java.lang.Properties -> javafx.util.Properties。和Java相似的又一个类,但是可以移植到移动设备上。但需要注意的是,JavaFX的属性文件和Java属性文件格式不一致。

 

CSS支持的变化: JavaFX Discussion Blog

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类, 你的代码很可能需要修改了,因为变量名称换成了更有说明性的方法名,但是功能还是一样的。

分享到:
评论

相关推荐

    学习JavaFX1.2脚本语言

    8. **集成开发环境(IDE)支持**:尽管JavaFX 1.2的时代,IDE支持可能不如现在丰富,但Eclipse和NetBeans等IDE已经提供了对JavaFX的初步支持,帮助开发者更高效地编写和调试代码。 通过学习“JavaFX脚本语言_翻译_....

    javafx1.2 API文档(英文)

    NULL 博文链接:https://wison.iteye.com/blog/552853

    JavaFX+1.2+Application+Development+Cookbook.pdf

    通过以上概述,可以看出《JavaFX 1.2 Application Development Cookbook》不仅是一本实用的技术指南,还是一部深入探讨 JavaFX 技术细节和最佳实践的宝贵资源。无论是初学者还是有经验的开发者都能从中获益。

    pro JavaFX 8 源代码

    code 源代码 JavaFX runs on desktops (Mac, Windows, Linux), as well as embedded devices such as the Raspberry Pi. As the Internet of things (IoT) is increasingly realized, JavaFX is well positioned to ...

    javafx使用指南-目录版.pdf

    JavaFX 使用指南 JavaFX 是一个基于 Java 语言的软件平台,用于开发桌面应用程序、移动应用程序和网络应用程序。它提供了一个统一的编程模型,可以跨平台运行,具有高清晰度的图形用户界面和多媒体支持。 JavaFX ...

    javaFx 学习--入门示例程序的源码

    在"javaFx 学习--入门示例程序的源码"这个压缩包中,包含了一个名为"helloworld"的文件,这通常是一个初学者接触任何编程语言或库时的第一个示例。 HelloWorld 示例是编程领域的基础,它演示了如何在JavaFX中展示...

    Javafx 例子源代码

    反复反复反复反复反复反复哈哈哈哈呵呵呵呵呵呵和哈哈哈哈和 哈哈哈

    Learn JavaFX 8 源代码

    JavaFX 是一个用于创建桌面和移动应用程序的Java平台,它提供了丰富的用户界面组件和图形功能。...每个章节的源代码实例都是精心设计的,旨在帮助读者逐步掌握JavaFX编程,从而创建出功能丰富、视觉吸引人的应用程序。

    javafx官方范例代码

    javafx官方示范案例合集,示范了常用的几种控件的创建和使用。 javafx已经集成到java8中,只要用户的jdk版本是1.8或以上就行,不需要引用额外的jar包

    JavaFX8、JavaFX9源代码

    1.javafx-8-intro-by-example-master.zip; 2.learn-javafx-8-master.zip; 3.pro-javafx-8-master.zip; 4.pro-javafx-9-master.zip; 5.javafx-9-by-example-master.zip; 6.java-apis-extensions-and-libraries-...

    javaFx 部分代码

    此代码示例展示了如何利用JavaFX创建一个简单的绘图程序,用户可以在其中绘制不同的形状,并具有撤销功能以及调整画笔颜色和大小的能力。 #### 二、关键概念与组件 在深入分析代码之前,我们先了解一下JavaFX中几...

    javafx画板程序

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的现代Java GUI库。这个"javafx画板程序"是一个使用JavaFX技术实现的简单绘画应用,它模仿了Windows操作系统内置的“画图”程序,允许用户绘制图形...

    JavaFx2.0入门指南

    JavaFX 2.0 入门指南是针对那些希望通过JavaFX快速开发富用户体验应用程序的开发者设计的。这个指南,源自Oracle官方,包含了中英文对照,旨在帮助初学者快速上手。在本文档中,你将学习如何利用JavaFX创建一个名为...

    JavaFx本质论源代码

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的开源框架。它源自Sun Microsystems(现为...通过仔细研究这些源代码,你可以掌握如何有效地利用JavaFX构建功能强大、视觉效果出色的桌面应用程序。

    JavaFX初学者指南

    ### JavaFX初学者指南知识点详解 #### 一、JavaFX简介 JavaFX 是一款用于创建丰富客户端应用(RIA)的强大工具包。它不仅支持桌面应用的开发,还为移动设备和Web应用程序提供了丰富的功能集。JavaFX 的设计目标是...

    JavaFx 官方源码例子

    JavaFX是Java平台上的一个强大的用户界面工具包,用于创建桌面、移动和Web应用程序。它提供了丰富的图形和媒体功能,支持2D和3D渲染、CSS样式以及自定义控件。这个压缩包包含了一些官方提供的JavaFX源码示例,非常...

    JavaFX编程程序

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的Java平台。它提供了丰富的用户界面组件、2D和3D图形功能、媒体支持以及动画工具,使得开发者能够创建出具有高度交互性和视觉吸引力的应用。在...

    javaFx入门演示示例程序操作图片

    javaFx入门演示示例程序操作图片

    使用opencv的第一个javaFX应用程序.docx

    而JavaFX则是一种用于构建桌面应用程序的框架,它提供了丰富的用户界面组件和多媒体支持。本文将详细介绍如何结合OpenCV与JavaFX构建一个简单的图像处理应用,并通过具体的步骤指导读者完成开发过程。 #### 二、...

Global site tag (gtag.js) - Google Analytics