質問
JavaFX Scriptを使用できるのと同じ程度に、新しいJavaFX APIによって提供される新しい機能をJavaから直接利用できますか?
基礎となるすべてのJavaFX APIは、純粋にJavaまたはJavaFX Script、あるいはそれらの組み合わせですか?
解決
JavaFX APIは、JavaFXとJavaが混在しています。 SDKには、APIの一部を含むアーカイブsrc.zipが付属しています(最も基本的なクラスのみが含まれていますが、javafx.sceneなどが欠落しています)。
JavaからJavaFXコードを呼び出すことは、JavaFX 1.x AFAIKでは公式にサポートされていません。 JavaFXブログ内のブログエントリがあり、サポートされていない方法でそれを行う方法を示します。 API、しかしそれは複雑であり、将来のバージョンではこの方法で動作しません。
JavaからJavaFXを使用するには、サポートされている2つの方法があります。 この記事に示すように、Scripting APIを使用してJavaFXコードを呼び出します。 a>。または、最もエレガントなソリューションである私見では、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に付属するシーングラフを使用します。 " 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;
}