11

私は、Java でグラフィック レンダラーをターゲットにしようとしているグループと協力しています。java.awt.Graphics2Dをターゲットにすることが前方互換性を持つかどうかを把握しようとしています。つまり、JavaFX ディスプレイのような他のライブラリは、Graphics2Dインスタンスからレンダリングできますか? java.awt.Graphics2Djavafx.scene.canvas.GraphicsContextの間に相互運用性はありますか?

または、直接Graphics2DGraphicsContextの間にない場合、SwingがGraphics2Dレンダーをパネルに表示するのと同様に、JavaFXアプリケーションでGraphics2Dレンダーを表示する手段はありますか?

バックグラウンド

質問から明らかでない場合、私はJavaエコシステムにかなり慣れていません。より詳細なコンテキストについては、インターネット検索で見つけたほとんどのものは、AWT で行われたことを JavaFX で行う方法を説明する例/チュートリアルです (サンプル記事を参照)。相互運用性はありません。ただし、エコシステムに詳しい人が質問に完全に答えてくれることを願っています。

4

1 に答える 1

23

awt Graphics2Dと JavaFX GraphicsContextの間に組み込みの相互運用性はありません。これらは完全に別個の UI ツールキット用の完全に別個の API です。

おすすめ

既存の Swing アプリケーションを変更またはプラグインする必要はありますか?

はい => コー​​ドをjava.awt.Graphicsインターフェイスに追加し、(JavaFX に埋め込む場合) awt でレンダリングされたグラフィックを SwingNode にラップするか、以下に定義するブリッジを使用します。

いいえ => JavaFX グラフィックス コンテキストまたは JavaFX シーン グラフへの直接のコード。

JavaFX での Swing (および AWT) の表示

JavaFX で Swing を表示するには、 Java 8 早期アクセス リリースで利用可能なSwingNodeを使用できます。

Swing での JavaFX の表示

Swing で JavaFX を表示するには、JFXPanelを使用できます。JavaFX キャンバスを JFXPanel に配置します。詳細については、JavaFX for Swing Developersチュートリアルを参照してください。

AWT と JavaFX グラフィックスの橋渡し

ブリッジ パターンを実装して抽象インターフェイスを開発し、構成済みの Graphics 実装に委譲することができます。私がリンクしたwikiページは、これがどのように行われるかの非常に良い例を提供します. このようなブリッジの実装は非常に簡単だと思います。たとえば、java.awt.Graphicsを実装し、API 呼び出しを JavaFX GraphicsContext 操作にマップできます。ブリッジが完成したら、ブリッジ インターフェースにコーディングするだけで、ブリッジは API 呼び出しを、選択した実装に応じて適切な awt または javafx メソッドのスレッドセーフな呼び出しに変換します。


更新: 2014 年 5 月 20 日

David Gilbert ( JFreeChart作成者) がブリッジを作成しました。プロジェクトは FXGraphics2D です。

FXGraphics2D は、JavaFX Canvas を対象とする Graphics2D API の無料実装です。このコードは、 Orson ChartsJFreeChartを使用するために開発されましたが、Graphics2D API を使用するすべてのコードに一般的に役立ちます。

FXGraphics2D には JDK 1.8.0 以降が必要であり、(3 条項) BSD スタイルのライセンス条件に基づいてライセンス供与されます。

FXGraphics2D のホームページgithub の場所


ねじ切りのアドバイス

JavaFX と Swing Code を混在させる場合は、スレッドの管理方法に注意してください。どちらのツールキットもシングルスレッドであり、どちらのツールキットも独自のスレッドで処理を実行するため、JavaFX コードは JavaFX スレッドで実行し、Swing コードは Swing スレッドで実行する必要があります。

JavaFX SceneGraph を検討してください

JavaFX には、2D 形状をレンダリングできるシーン グラフが含まれています。直接描画キャンバスの代わりにシーン グラフを使用することを検討してください。

将来の可能性

JavaFX の将来のバージョンには、OpenGL バッファに直接レンダリングできるようにするOpenGLNodeのようなものが含まれる可能性があります。このようなノードで描画するための API は、JavaFX キャンバス API とは大きく異なる可能性があります (たとえば、joglなどを使用します)。

リンクされたサンプル記事に関するメモ

質問でリンクする記事は、JavaFX 1.x に関連しています。一般に、JavaFX 1.x に関連する古い記事はすべて完全に無視してください。JavaFX 1.x は完全に時代遅れであり、そのような記事の情報は混乱を招く可能性があるためです。

JavaFX 2+ に関連する記事は関連性があり、それらの最良の情報源は公式の Oracle JavaFX 2 ドキュメントです。

于 2013-06-12T19:49:21.867 に答える