2

新しい JavaFX API によって提供される新しい機能を Java から直接、JavaFX Script を使用するのと同じ程度に利用できますか?

基礎となるすべての JavaFX API は、純粋に Java または JavaFX Script なのか、それとも混合なのか?

4

3 に答える 3

3

JavaFX API は、JavaFX と Java を組み合わせたものです。SDK には、API の一部を含むアーカイブ src.zip が付属しています (最も基本的なクラスのみが含まれていますが、javafx.scene などは欠落しています)。

Java から JavaFX コードを呼び出すことは、JavaFX 1.x AFAIK では正式にサポートされていません。JavaFX ブログには、サポートされていない API を使用してそれを行う方法を示すブログ エントリがありますが、これは複雑であり、将来のバージョンではこの方法では機能しません。

Java から JavaFX を使用するには、2 つの方法がサポートされています。この記事に示されているように、スクリプト API を使用して JavaFX コードを呼び出します。または、これが最も洗練されたソリューションであり、JavaFX を使用して API アクセス コードを記述し、Java インターフェースを定義してプレーン Java から JavaFX コードと対話し、それらのインターフェースを JavaFX に実装します。

于 2009-03-28T11:39:49.030 に答える
1

JavaFX でマルチメディア コンポーネントを使用して、ある程度の成功を収めることができました。この方法では完全にサポートされておらず、JavaSE での com.sun パッケージと同様に変更される可能性があります。

それらを Swing UI に統合し、FX で実行できる MM の機能を Java から直接実行できるようにしました。

彼らがすぐにその一部をコアライブラリに入れることを願っています.

于 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 に答える