2

javafx アプリケーションのメニュー項目をクリックしてJDialog、for Jasper Report を含むスイングを表示します。JRViewerしかし、それはjavafxステージによって所有されていないため、JDialogその後でも MODAL ではありません。setModal(true)javafx ステージを の所有者にする方法はJDialog? または、javafx ステージ、シーン内に Jasper レポートを表示する方法は?

4

6 に答える 6

3

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);

上記のコードでは、ステージはダイアログとまったく同じように動作します。

これもチェックしてください:

JavaFXダイアログを作成するには?

Hello World、JavaFX スタイル

于 2013-01-05T20:11:42.653 に答える
3

最初の (基本) 質問に戻ります。ステージを JDialog の所有者にすることはできません。しかし、SwingNode のコンテンツを設定した後、

swingNode.setContent(xxx);

(AWT-)フレームまたは(AWT-)ダイアログが見つかるまで、xxxの親を取得できます(xxxの親の親でもある可能性があります...)。SwingNode の場合は JLightweightFrame です。このオブジェクトを所有者として使用して、JDialog を作成できます。

しかし、JavaFX SwingNode の仕組みにバグがあると思います。モーダル ( ) に設定すると、JDialog は機能的にモーダルに見えますがsetModal(true)、メイン (JavaFX) ウィンドウの背後に表示される場合があります。メイン ウィンドウを移動したり、前面に移動したりすることは引き続き可能ですが、モーダル ダイアログがある場合は不可能です。しかし、これは別のトピックです。

于 2016-01-09T12:51:13.833 に答える
0

JavaFX 8 で JasperReports 印刷プレビュー ステージ クラスを作成しました。これは純粋な JavaFX コードであり、SwingNodeクラスを使用する必要はありません。

JRViewer と比較すると、リンクやパーツはサポートされていませんが、印刷プレビュー ウィンドウでは必要ありません。一方、コードははるかに短いため、理解しやすく、すべての人のニーズに合わせて採用するのが簡単です。

このクラスのソース コードは、GitHub リポジトリで自由に入手できます。

于 2015-01-12T10:12:27.647 に答える
0

または、javafx ステージ、シーン内に Jasper レポートを表示する方法は?

Jasper レポートから HTML を出力し、レポートを JavaFX WebViewにロードします。

javafxステージをJDialogの所有者にしますか?

これは不可能だと思います。代わりに、アプリケーションを Swing アプリケーションにし、Swing JFrame内のJFXPanel内で JavaFX コンテンツをホストすることです。この場合、ステージはなく、JDialog の所有者は、JFXPanel をホストする JFrame にすることができます。

于 2012-09-24T14:14:00.140 に答える