2

我能否像使用 JavaFX Script 一样直接从 Java 中利用新 JavaFX API 提供的新功能?

所有底层 JavaFX API 是纯 Java 或 JavaFX 脚本还是混合?

4

3 回答 3

3

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 中实现这些接口。

于 2009-03-28T11:39:49.030 回答
1

我们能够成功地使用带有 JavaFX 的多媒体组件。它们完全不受这种方式的支持,并且可能会发生类似于 com.sun 包在 JavaSE 中的变化。

我们将它们集成到 Swing UI 中,并且能够直接通过 Java 完成您可以在 FX 中完成的 MM 工作。

希望他们尽快将其中的一些内容放入核心库中。

于 2009-04-01T20:21:52.317 回答
1

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;



}
于 2009-04-04T01:08:53.240 回答