论坛首页 Web前端技术论坛

JavaFX 1.2 特性和增强功能

浏览 3896 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-15  
JavaFX 1.2 SDK 对 JavaFX 1.1 SDK 进行了重要更新。JavaFX 1.2 SDK 包含对 API 向前兼容的更改。从 JavaFX 1.1 SDK 中删除了一些类、API 和变量,同时在 JavaFX 1.2 SDK 中添加了一些新的类、API 和变量。

JavaFX 1.2 SDK 发行版不能与 JavaFX 1.1 SDK 进行二进制兼容。这意味着必须用 JavaFX 1.2 SDK 重新编译应用程序及其所依赖的所有库。


动画

受影响的软件包:javafx.animation、javafx.animation.transition

    * 现在,Transition.interpolate 被命名为 interpolator。更改图标

      以前: public override var interpolate = Interpolator.LINEAR;
      现在: public override var interpolator = Interpolator.LINEAR;
    * Transition 类继承 Timeline 类。更改图标

    * 不能再访问 SequentialTransition 和 ParallelTransition 中的 Transition.duration 变量。但是,现在 Timeline 中包含可公共读取的受保护变量 cycleDuration 和 totalDuration。删除图标 新增图标

      public-read protected var cycleDuration: Duration
      public-read protected var totalDuration: Duration

    * KeyFrame 不再包含 timelines 变量。不再支持子时间线。现在,ParallelTransition 和 SequentialTransition 支持此功能。删除图标

    * Transition 类不再包含 timelineDirty 变量。markDirty() 函数提供与原先的 timelineDirty 变量相同的支持。timelineDirty 以前是 Transition 类的一个受保护变量,现在是一个局部变量,可以通过 Transition 类中受保护的 markDirty() 函数进行修改。通过此更改,第三方库可以扩展 JavaFX Transition 基类以实现其他 Transition 类。现有的 Transition 类(如 TranslationTransition、RotateTranslation 和 PathTransition)的作用和以前一样。重命名

      以前: timelineDirty = true;
      现在: markDirty()

异步操作

受影响的软件包:javafx.async

    * javafx.async 软件包不再包含 AbstractAsyncOperation 和 RemoteTextDocument 类。javafx.io.http.HttpRequest 类可以代替 javafx.async.RemoteTextDocument 类。删除图标

    * javafx.async 软件包中新增了以下类。新增图标

          o JavaTaskBase
          o RunnableFuture
          o Task


效果

受影响的软件包:javafx.scene.effect

    * javafx.scene.effect 软件包中新增了以下类。新增图标

          o BlurType
          o BoxBlur


图形

受影响的软件包:javafx.scene.transform、javafx.scene.image、javafx.ext.swing、javafx.scene、javafx.scene.layout、javafx.stage、javafx.geometry、javafx.scene.paint

    * 现在,javafx.scene.transform.Affine 类中矩阵元素的变量命名如下:更改图标

          m00 --> mxx
          m01 --> mxy
          m02 --> tx
          m10 --> myx
          m11 --> myy
          m12 --> ty


      但是,Transform.affine 方法较常见的用法不受影响。

      以前: Affine { m00: 1 m10: 0 m01: 0 m11: 1 m02: 25 m12: 15 }
      现在: Affine { mxx: 1 myx: 0 mxy: 0 myy: 1 tx: 25 ty: 15 }
    * 现在,javafx.scene.image.Image.fromBufferedImage(image:java.awt.image.BufferedImage) 被命名为 javafx.ext.swing.SwingUtils.toFXImage(image:java.awt.image.BufferedImage)。参数和功能与原先的方法相同。更改图标

    * javafx.scene 软件包支持以下新类:新增图标

          o Parent

    * javafx.geometry 软件包支持以下新类:新增图标

          o BoundingBox
          o Bounds

    * 禁用 Node 时,不能提交事件。更改图标

          o 应用程序不能在禁用的 Node 上预定事件。
          o 禁用 Node 时,不能调用鼠标和键盘事件处理程序。
          o 聚焦的 Node 被禁用时,可能失去焦点。

    * javafx.ext.swing 软件包中的 Swing 组件不再包含 enabled 变量。disable 变量仍可用且足以处理组件的启用和禁用。删除图标

    * 现在,javafx.scene.Node、javafx.scene.CustomNode 和 javafx.scene.Group 中包括新布局变量:新增图标

          o layoutInfo
          o layoutBounds
          o layoutX
          o layoutY

    * 按照一定的布局来放置节点的首选方法是 layoutX 和 layoutY,而不是使用 translateX 和 translateY。 虽然 translateX 和 translateY 很可能会起作用,但 layoutX 和 layoutY 的性能更好。此外,使用合法的 translateX 和 translateY 时,如果之前未使用 layoutX 和 layoutY,则初始值会丢失。新增图标

    * 默认节点 layoutBounds 不包括剪辑、效果或任何转换。重命名

    * 使用 scaleX、scaleY 或 rotate 变量时,节点的隐式枢轴 (pivot) 是 layoutBounds 的(未转换)中心。重命名

    * Node、Group 和 CustomNode 类中不再包含 boundsInScene 变量。localToScene(boundsInLocal) 函数提供与原先的 boundsInScene 变量相同的支持。计算 boundsInScene 变量的代价很大,由于不允许绑定到 localToScene 函数,localToScene(boundsInLocal) 函数能提供更好的性能。重命名

      以前: node.boundsInScene
      现在: node.localToScene(node.boundsInLocal)
    * 现在,javafx.scene.layout 软件包包含以下类。新增图标

          o ClipView
          o Flow
          o LayoutInfo
          o LayoutInfoBase
          o Panel
          o Stack
          o Tile

      有关更多信息,请参见 What's New in JavaFX 1.2: New Layouts and Effects(JavaFX 1.2 的新增功能:新布局和效果)。
    * 从 javafx.scene.Parent 类(在 ClipView、Flow、Panel、Stack、Tile、HBox 和 VBox 类中)继承新的布尔型 public-read protected 变量 needsLayout。新增图标

    * 现在,javafx.scene.layout 软件包 HBox 和 VBox 支持使用 nodeVPos 和 nodeHPos 在已分配的空间内放置节点。 在 JavaFX SDK 1.1 中,所有节点都放置在顶部(针对 HBox)且靠左(针对 VBox)。更改图标

    * 在 javafx.scene.layout.Resizable 类中,Resizable 类不再包含 preferredHeight 和 preferredWidth 变量。getPreferredHeight() 和 getPreferredWidth() 函数提供与原先的 preferredHeight 和 preferredWeight 变量相同的支持。preferredHeight 和 preferredWidth 现在是局部变量,可以通过 Resizable 类中受保护的 getPreferredHeight() 和 getPreferredWidth() 函数进行访问。重命名

      以前: public-read protected preferredWidth: Number
      现在: protected override bound function getPreferredWidth(): Number
      以前: public-read protected preferredHeight: Number
      现在: protected override bound function getPreferredHeight(): Number
    * 在 JavaFX SDK 1.1 中,一个 Group 的不可见子节点的范围(即 visible: false; 的子节点)包含在该 Group 的范围中。在 JavaFX SDK 1.2 中,任何不可见子节点都不影响其父 Group 的范围。如果您想实现此行为,请将子节点设置为 (visible:true; opacity:0;)。更改图标

    * javafx.stage 中新增了以下类:新增图标

          o Alert
          o Screen

    * 新增的 Screen 类导致 javafx.screen.width 和 javafx.screen.height 属性被废弃。javafx.FX.getProperty() 不再支持 javafx.screen.width 和 javafx.screen.height。删除图标

    * Screen 类还包括 dpi 属性以查询屏幕大小和分辨率 (DPI)。新增图标

    * javafx.stage.Stage 类中的 focused 变量现在被命名为 containsFocus。更改图标

    * 在以下任一情况下,在多个位置使用同一节点是非法的:在组的内容序列中,作为另一节点的剪辑或作为 CustomNode.create() 函数的返回值。如果 JavaFX 1.2 运行时检测到尝试在多个位置使用同一节点,则会抛出异常并忽略此尝试,以下所述的情况除外。更改图标

      JavaFX 技术的以前发行版明确允许将一个节点插入到组的内容序列中,即使此节点已经是另一个组的内容序列的成员也是如此。如果发生此情况,则将此节点从另一个组中隐式删除。在 JavaFX 1.2 运行时中,当节点已经是另一个组的成员时,将此节点添加到一个组是非法的,因为这很可能是编程错误。但是,保留了隐式删除行为,并输出警告消息和异常栈跟踪,以便为现有代码提供过渡期。

    * 从由 JavaFX Production Suite 创建的 FXZ 文件装入的内容获取指定的节点并将这些节点放入新组是很常见的。更改图标

      var fxdContent = FXDLoader.loadContent("scene.fxz");
      var g = Group {
          content: [ fxdContent.getNode("myNode") ]
      }


      此代码将在 JavaFX 1.2 中生成警告消息,因为从 fxdContent 检索到的节点已经是 FXDLoader 创建的组的成员。要避免此警告消息,请在将节点添加到新组之前从原先的组删除此节点。如果使用从 FXZ 文件装入的节点,则可以使用 javafx.fxd.Duplicator 类复制节点(而不是移动它们)。或者,可以重新排列插图的结构并重新生成 FXZ 文件。避免在装入 FXZ 文件后执行场景图形操作。

    * javafx.scene.paint.Color 类不再包含 fromAWTColor 方法。删除图标

      public fromAWTColor(c: java.awt.Color) : Color


    * 从 javafx.ext.swing.SwingComponents 类中删除了 enabled 变量。删除图标

键盘和鼠标事件

受影响的软件包:javafx.scene.control、javafx.ext.swing、javafx.scene.input

    * 默认情况下,Node 不可聚焦,Node 不需要使用键盘处理程序进行聚焦,但有两个例外:Control 和 SwingComponent 在默认情况下是可以聚焦的。现在包含新的布尔型变量 focusTraversable。focusTraversable 变量指定此 Node 是否成为聚焦遍历循环的一部分。更改图标 新增图标

    * 现在,MouseEvent 类包含一个新的 source 变量节点以进行事件冒泡。source 变量是鼠标事件下节点子树中的顶端节点。当节点是叶节点时,source 变量与此节点相同。当节点是父类实例时,source 变量是鼠标事件下 (@node) 子树中的顶端节点。新增图标

    * 现在,javafx.scene.input 软件包包含以下类。新增图标

          o InputMethodEvent
          o InputMethodHighlight
          o InputMethodTextRun
          o MouseButton
          o TextInput


语言更改

    * 请参阅 JavaFX Script 编程语言参考。

    * 多继承:在 JavaFX 1.1 中,JavaFX 类可以从类和接口继承,但具有有关可以继承哪些类的复杂规则。在 JavaFX 1.2 中,已添加 mixin 类的概念。继承规则现在包含 mixin,从而变得简单并且限制也不那么严格。现在,JavaFX 类可以从最多一个(非 mixin)类和任意多个接口或 mixin 继承。不能直接实例化 mixin。Mixin 和常规类很类似,但在声明中有 mixin 修饰符。有关更多信息,请参见 JavaFX 语言教程。

    * 现在显式序列中需要逗号:更改图标

      [3, 77, 8]


      但是,} 后面不需要逗号(正如不需要分号一样):

      [Foo {
          x: 14
       }
       Bar {
          sneeze: "cough"
       }
      ]


    * 已更改 or 运算符和 and 运算符的优先级。现在,JavaFX and 运算符的优先级比 or 运算符高。更改图标

         a or b and c  


      等效于:

         a or (b and c)


    * 块中的 var 不能与包含块中的 var 重名。现在,以下情况是不允许的:更改图标

      public function f() {
         var x : Integer;
         {
            var x : Integer; //compile error
         }
      }


      或

      for(i in [1..5]) {
         for(i in [2..4]) { //compile error
             println("Test");
         }
      }
       

    * bind 中不再允许使用 on replace 触发器。更改图标

      var x = bind for (i in [0..5]) {
          var y = (i mod 2 == 0) on replace { //compile error
              println("y changed");
          }
          y
      }


    * 不再允许对 Iterable 使用绑定 for 循环,因为它们是没有意义的,不会产生更新。更改图标

    * 对 Duration 的更改包括:更改图标

          o Duration.toMillis() 返回值为双精度型而不是数值型。
          o Duration.INDEFINITE 现在表示一个未知长度的时间段。
          o 不再支持 Duration.toDate()。

    * 许多保留字不再正式保留,因此可以将其用作标识符:更改图标

          o first
          o in
          o init
          o into
          o inverse
          o last
          o on
          o postinit
          o replace
          o step
          o trigger
          o tween
          o where
          o with


媒体

受影响的软件包:javafx.scene.media

    * 新增了实时流协议 (real-time streaming protocol, RTSP) 支持。您可以在 RTSP wiki 上了解有关 RTSP 的更多信息。新增图标

      var url: String = "rtsp://sqe-macpro-2.sfbay.sun.com/sample_300kbit.mov";

    * 媒体支持另外两种 OS 平台:OpenSolaris 和 Ubuntu Linux。这两种平台使用开源多媒体框架 GStreamer。新增图标

    * 媒体具有更好的视频拖动播放支持。新增图标


移动

    * 移动现在支持矩形剪辑。新增图标

    * 支持跨平台视频(VP6 编码),现在包括 FXM/VP6。新增图标

    * 移动仿真器(仅 Windows 平台)支持其他媒体文件:新增图标

          o 现在默认支持 FXM/FLV、WAV 和 MIDI 文件,且不需要第三方组件。
          o 对于 MP3 和 AMR 文件,必须安装相应的 DirectShow 过滤器(一个分路器和一个解码器)。例如,K-Lite Codec Pack 包含所有必需的过滤器。
          o 对于 3GP、MPEG1、MP4、MOV 文件,必须安装 Apple QuickTime 播放器。如果其中任一格式不能运行,请重新安装 Apple QuickTime 播放器并重新启动计算机。

性能改进

    * 场景图形重构的底层实现提供了更好的运行时性能。更改图标

    * 与以前的启动时间性能相比,现在的启动时间性能有了改进。更改图标

    * 编译器更改提供了更好的运行时性能。更改图标

    * 请参阅文章 Performance Improvement Techniques for JavaFX Applications(JavaFX 应用程序的性能改进技巧)。


持久性存储

受影响的软件包:javafx.io

    * 现在,新增的 javafx.io 软件包包含以下类。新增图标

          o Resource
          o Storage


平台支持

    * 现在,提供对另外两种 OS 平台的支持:新增图标

          o Solaris Beta:OpenSolaris 2009.06
          o Linux Beta:Ubuntu 8.04 LTE


Production Suite

受影响的软件包:javafx.fxd

    * 现在,提供了对 Adobe Photoshop CS4 和 Adobe Illustrator CS4 的支持。新增图标

    * 在 javafx.fxd 软件包中,FXDLoader 类有了一些额外变量和函数。FXDLoader 类从 javafx.async.Task 类继承而来,能够支持 FXZ/FXD 文件的后台装入。新增图标

    * 添加了 FXDNode 类。用 FXDNode 类替代了 UiStub 类。现在 UI 桩文件是从 FXDNode 类扩展而来。新增图标

    * FXDNode 类提供了两种装入图形内容的方式:同步(阻塞其他操作)或异步(在后台运行)。更改图标

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


    * FXDContent 类不再包含 _root 变量。getRoot() 函数提供与原先的 _root 变量相同的支持。更改图标


UI 控件组件

受影响的软件包:javafx.scene.control

    * 现在,javafx.scene.control 软件包包含以下用于创建 UI 控件的类。新增图标

          o Behavior
          o Button
          o ButtonBase
          o CheckBox
          o Control
          o Hyperlink
          o Keystroke
          o Label
          o Labeled
          o ListView
          o ProgressBar
          o ProgressIndicator
          o RadioButton
          o ScrollBar
          o Skin
          o Slider
          o TextBox
          o TextInputControl
          o ToggleButton
          o ToggleGroup

    * 请参阅文章《JavaFX Scene UI Controls》(《JavaFX 场景 UI 控件》)。

    * 现在,Control 是一个抽象类并进行了重要的更改。更改图标

    * 在 javafx.scene.control.Skin 类中添加了 Behavior 变量,同时从该类中删除了 focused、hover 和 pressed 变量。删除图标 新增图标

    * 在 javafx.scene.control.Skin 类中,scene 变量被重命名为 node。更改图标

      以前:

      public-init protected scene Node

      现在:

      public-read protected node Node

    * 现在,Skin 类是一个抽象类并添加了新的 contains() 和 intersects() 函数。更改了现有的函数名称,如下所示:更改图标 新增图标

      以前: protected computeMaxHeight: Number
      现在: protected getMaxHeight(): Number
      以前: protected computeMaxWidth(): Number
      现在: protected getMaxWidth(): Number
      以前: protected computeMinHeight(): Number
      现在: protected getMinHeight(): Number
      现在: protected computeMinWidth(): Number
      以前: protected getMinWidth(): Number
      以前: protected computePrefHeight(width: Number): Number
      现在: protected getPrefHeight(width: Number): Number
      以前: protected computePrefWidth(height: Number): Number
      现在: protected getPrefWidth(height: Number): Number
    * 对 TextBox 进行了重要的更改,向其中添加了新的功能。更改图标 新增图标

UI 图表组件

受影响的软件包:javafx.scene.chart、javafx.scene.chart.data、javafx.scene.chart.part

    * 现在,新增的 javafx.scene.chart 软件包包含以下针对图表组件的类。新增图标

          o AreaChart
          o AreaChart.Data
          o AreaChart.Series
          o BarChart
          o BarChart.Data
          o BarChart.Series
          o BarChart3D
          o BubbleChart
          o BubbleChart.Data
          o BubbleChart.Series
          o Chart
          o LineChart
          o LineChart.Data
          o LineChart.Series
          o PieChart
          o PieChart.Data
          o PieChart3D
          o ScatterChart
          o ScatterChart.Data
          o ScatterChart.Series
          o XYChart

    * 现在,新增的 javafx.scene.chart.data 软件包包含以下针对图表数据组件的类。新增图标

          o Data
          o Series

    * 现在,新增的 javafx.scene.chart.part 软件包包含以下针对图表部件组件的类。新增图标

          o Axis
          o Axis.TickMark
          o CategoryAxis
          o Legend
          o Legend.LegendItem
          o NumberAxis
          o PlotSymbol
          o PlotSymbol.Circle
          o PlotSymbol.Cross
          o PlotSymbol.HollowDiamond
          o PlotSymbol.HollowTriangle
          o PlotSymbol.Square
          o Side
          o ValueAxis


Web 服务

受影响的软件包:javafx.io.http、javafx.data.pull、javafx.data.xml、javafx.data.feed、javafx.data.feed.atom、javafs.data.feed.rss

    * 现在,HttpRequest.enqueue() 被命名为 HttpRequest.start()。更改图标

    * 现在,HttpRequest.cancel() 被命名为 HttpRequest.stop()。更改图标

    * 不再包含以下两个公共函数:删除图标

      public function setHeader(name: String, value: String)
      public function getResponseHeaderNames(): String[]


    * 这些方法和字段的签名由 Integer 更改为 Long:更改图标

      public-read protected var towrite: Long;
      public-read protected var toread: Long;
      public-read protected var written: Long;
      public-read protected var read: Long;
      public var onToWrite: function(bytes: Long): Void = null;
      public var onToRead: function(bytes: Long): Void = null;
      public var onWritten: function(bytes: Long): Void = null;
      public var onRead: function(bytes: Long): Void = null;


    * 现在,javafx.io.http 软件包中包含 URLConverter 类。新增图标

    * 新增的 javafx.data.feed 软件包包含以下两个类:新增图标

          o Base
          o FeedTask

    * 新增的 javafx.data.feed.atom 软件包包含以下类:新增图标

          o Atom
          o AtomTask
          o Category
          o Content
          o Date
          o Entry
          o Factory
          o Feed
          o Generator
          o Id
          o Link
          o Person

    * 新增的 javafx.data.feed.rss 软件包包含以下类:新增图标

          o Category
          o Channel
          o Enclosure
          o Factory
          o Guid
          o Image
          o Item
          o RSS
          o RssTask
          o Source


其他

受影响的软件包:javafx.util、javafx.data

    * 新增的 javafx.date 软件包包含 DateTime 类。新增图标

    * javafx.util 软件包中新增了以下类:新增图标

          o Math
          o Properties

    * 新增的 javafx.data 软件包包含以下两个类:

          o Converter
          o Pair

    * 新增的 javafx.reflect 软件包包含以下两个类:

          o FXChangeListener
          o FXChangeListenerID
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics