javafx アプリケーションのメニュー項目をクリックしてJDialog
、for Jasper Report を含むスイングを表示します。JRViewer
しかし、それはjavafxステージによって所有されていないため、JDialog
その後でも MODAL ではありません。setModal(true)
javafx ステージを の所有者にする方法はJDialog
? または、javafx ステージ、シーン内に Jasper レポートを表示する方法は?
6 に答える
JDialog を使用しないでください。JavaFX ではStagesを使用します。Jasper レポートをScene内に配置し、Scene を Stage に配置します。Swing コンポーネントを JavaFX コンポーネント内に配置することはできないと思うので、次のリンクを確認する必要があります: JavaFX を Swing アプリケーションに統合する
JavaFX ダイアログを作成するコード:
Stage stage = new Stage();
stage.setTitle("Title");
stage.setResizable(false);
stage.initModality(Modality.APPLICATION_MODAL);
stage.initOwner(primaryStage);
stage.initStyle(StageStyle.UTILITY);
(...)
Scene scene = new Scene(...);
stage.setScene(scene);
上記のコードでは、ステージはダイアログとまったく同じように動作します。
これもチェックしてください:
最初の (基本) 質問に戻ります。ステージを JDialog の所有者にすることはできません。しかし、SwingNode のコンテンツを設定した後、
swingNode.setContent(xxx);
(AWT-)フレームまたは(AWT-)ダイアログが見つかるまで、xxxの親を取得できます(xxxの親の親でもある可能性があります...)。SwingNode の場合は JLightweightFrame です。このオブジェクトを所有者として使用して、JDialog を作成できます。
しかし、JavaFX SwingNode の仕組みにバグがあると思います。モーダル ( ) に設定すると、JDialog は機能的にモーダルに見えますがsetModal(true)
、メイン (JavaFX) ウィンドウの背後に表示される場合があります。メイン ウィンドウを移動したり、前面に移動したりすることは引き続き可能ですが、モーダル ダイアログがある場合は不可能です。しかし、これは別のトピックです。
JavaFX 8 で JasperReports 印刷プレビュー ステージ クラスを作成しました。これは純粋な JavaFX コードであり、SwingNodeクラスを使用する必要はありません。
JRViewer と比較すると、リンクやパーツはサポートされていませんが、印刷プレビュー ウィンドウでは必要ありません。一方、コードははるかに短いため、理解しやすく、すべての人のニーズに合わせて採用するのが簡単です。
このクラスのソース コードは、GitHub リポジトリで自由に入手できます。
または、javafx ステージ、シーン内に Jasper レポートを表示する方法は?
Jasper レポートから HTML を出力し、レポートを JavaFX WebViewにロードします。
javafxステージをJDialogの所有者にしますか?
これは不可能だと思います。代わりに、アプリケーションを Swing アプリケーションにし、Swing JFrame内のJFXPanel内で JavaFX コンテンツをホストすることです。この場合、ステージはなく、JDialog の所有者は、JFXPanel をホストする JFrame にすることができます。