我能否像使用 JavaFX Script 一样直接从 Java 中利用新 JavaFX API 提供的新功能?
所有底层 JavaFX API 是纯 Java 或 JavaFX 脚本还是混合?
JavaFX API 是 JavaFX 和 Java 的混合体。SDK 附带一个存档 src.zip,其中包含部分 API(仅包含最基本的类,但缺少 javafx.scene 等内容)。
JavaFX 1.x AFAIK 不正式支持从 Java 调用 JavaFX 代码。JavaFX 博客中有一篇博客文章向您展示了如何使用不受支持的 API 来完成它,但它很复杂,并且在未来的版本中不会以这种方式工作。
从 Java 中使用 JavaFX 有两种受支持的方式。您可以使用 Scripting API 来调用 JavaFX 代码,如本文所示。或者,恕我直言,这是最优雅的解决方案,使用 JavaFX 编写 API 访问代码,定义 Java 接口以从纯 Java 与您的 JavaFX 代码交互,然后在 JavaFX 中实现这些接口。
我们能够成功地使用带有 JavaFX 的多媒体组件。它们完全不受这种方式的支持,并且可能会发生类似于 com.sun 包在 JavaSE 中的变化。
我们将它们集成到 Swing UI 中,并且能够直接通过 Java 完成您可以在 FX 中完成的 MM 工作。
希望他们尽快将其中的一些内容放入核心库中。
JavaFX 中使用的场景图是开源的。你可以在这里查看(https://scenegraph.dev.java.net)。虽然该站点尚未更新以反映 JavaFX 1.x 附带的最终版本,但您仍然可以使用 JavaFX SDK 附带的 jar,并在您的 swing 应用程序中混合场景图和摆动节点。但是,您会遇到一些困难,因为此版本的场景图没有官方 API。
这是一个使用 JavaFX 1.0 附带的场景图的“hello world”。请记住在构建路径中包含“Scenario.jar”。
import java.awt.Color;
import java.awt.Paint;
import java.awt.geom.Point2D;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import com.sun.scenario.scenegraph.JSGPanel;
import com.sun.scenario.scenegraph.SGGroup;
import com.sun.scenario.scenegraph.fx.FXText;
public class HelloWorldScenario101 implements Runnable {
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new HelloWorldScenario101());
}
public HelloWorldScenario101() {
//
}
@Override
public void run() {
this.frame = new JFrame();
this.panel = new JSGPanel();
this.text = new FXText();
this.paint = new Color(255, 0, 0, 255);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Hello World");
frame.add(this.panel);
frame.setContentPane(this.panel);
scene = new SGGroup();
this.text.setText("Hello World");
this.text.setFillPaint(this.paint);
this.text.setLocation(new Point2D.Float(10, 10));
this.scene.add(this.text);
this.panel.setScene(scene);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JFrame frame;
private JSGPanel panel;
private SGGroup scene;
private FXText text;
private Paint paint;
}