几天前,我完成了将Modellus的源代码从JavaFX 1.3脚本迁移到JavaFX 2.0 Java语言的过程。 因此,我认为写关于我在此过程中学到的知识会很好。
我想指出,如果您想继续在JavaFX 2.0中使用JavaFX脚本,则可以使用Visage: http : //code.google.com/p/visage/
- CustomNode类不再存在。 扩展组或区域以创建“自定义节点”。
- 没有更多的块鼠标。 在javafx 2.0中,鼠标事件仅由最顶部的节点接收。Node上还有一个新方法:setMouseTransparent(boolean)。 将mouseTransparent设置为true的节点上的鼠标事件将被下面的最高节点忽略并捕获。
- 使用属性绑定值。 Javafx 2.0具有一组可以用来将值彼此绑定的类。 对于每种基本类型,都有一个类– SimpleBooleanProperty,SimpleDoubleProperty等,对于引用类型,您可以使用对象属性实例,例如,如果您要绑定颜色,则可以使用SimpleObjectProperty <Color>。
- 并非API中的所有变量都是“可绑定的”。 在Javafx 1.3脚本中,您可以绑定到API的任何变量。 在javafx 2.0 Java语言中,这意味着API中的所有变量都必须作为属性可用。 但是事实并非如此,例如Bounds,LinearGradient,Stop是不具有属性的类的示例,因此您不能直接绑定到其字段。 在这种情况下,您需要使用其他方法,例如底层绑定 。例如,假设您想将变量绑定到节点的布局边界的宽度。 由于Bounds的字段宽度不能作为属性使用,因此您必须执行以下操作:
在Javafx脚本中:
float nameLabelXPosition = bind - nameLabel.layoutBounds.width / 2;
在Javafx2.0 Java语言中:
nameLabelXPosition.bind(new DoubleBinding() { { super.bind(nameLabel.layoutBoundsProperty()); } @Override protected double computeValue() { return nameLabel.getLayoutBounds().getWidth() / 2; } });
- 使用javafx脚本initiliazer块时,现在可以使用javafx 构建器 。 但是,在javafx脚本中,您可以在初始化程序块中使用绑定,而在Java上,不能使用构建器来进行绑定。 只有在JavaFX 3.0(Lombard)中,您才能做到这一点: http : //javafx-jira.kenai.com/browse/RT-13680 。 因此,每当在javafx脚本初始化程序块上使用绑定时,就不能在java javafx 2.0中使用构建器。
- 在Javafx 2.0 Java上不再对序列提供语言级别的支持。 无论您在何处使用序列,现在都将使用ObservableLists。 要创建ObservableLists,可以使用FXColections创建器方法,在那里您会找到各种各样的方法来创建ObservableLists,甚至是空的方法。API上存在的序列已转换为ObservableLists。 例如,如果要在Group上插入节点,则需要获取其子节点ObservableList,然后调用方法add。 像这样:.getChildren()。add(Node)
- 没有更多的功能类型。 由于仅在java8上支持Closures,因此Oracle团队依赖于使用SAM类型。 那是一个类,只有一个您必须要重写的抽象方法(单一抽象方法)。 您可以使用与Oracle相同的策略,并在使用函数对象的任何地方编写SAM类型。
- 没有更多的触发器。 用变更侦听器替换触发器。 您可以将更改侦听器分配给与在Javafx脚本上分配触发器相同的属性。
- 子类上没有更多的变量覆盖。 对于这些,您将无法在Java上替代它,最好的事情是将值重新分配给子类上的变量。 但这并不相同,因为覆盖变量,在超类的初始化程序块之前被赋值。
有关此主题的更多信息,请参见结帐:
http://weblogs.java.net/blog/opinali/archive/2011/05/28/javafx-20-beta-first-impressions
如果您对此主题没有其他更有价值的提示,请在评论中添加它们,然后将它们插入帖子中。
参考: Pixel Duke博客上的JCG合作伙伴 Pedro Duque Vieira 从javafx 1.3迁移到javafx 2.0 。
相关文章 :
翻译自: https://www.javacodegeeks.com/2011/12/migrating-from-javafx-13-to-javafx-20.html