2

从 javafx 应用程序菜单项单击显示一个JDialog包含Jasper 报告的摆动。JRViewer但是JDialog即使之后它也不是 MODAL,setModal(true)因为它不属于 javafx 阶段。如何使 javafx 阶段成为 a 的所有者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 对话框?

你好世界,JavaFX 风格

于 2013-01-05T20:11:42.653 回答
3

回到第一个(基本)问题:不可能让 Stage 成为 JDialog 的所有者。但是,设置好 SwingNode 的内容后

swingNode.setContent(xxx);

您可以获取 xxx 的父级(也可能是 xxx 的父级的父级......),直到找到(AWT-)框架或(AWT-)对话框。在 SwingNode 的情况下,它是一个 JLightweightFrame。您可以使用此对象作为所有者来创建您的 JDialog。

但是,我认为 JavaFX SwingNode 机制中存在错误。如果将 JDialog 设置为模态 ( setModal(true)),则 JDialog 在功能上显示为模态,但它可能会出现在主 (JavaFX) 窗口的后面。仍然可以移动主窗口,把它放在前面等等,如果有一个模态对话框,这应该是不可能的。但这是另一个话题。

于 2016-01-09T12:51:13.833 回答
1

在 javafx ( jdk 1.8> ) 阶段查看 Jasper 报告

JasperPrint jp = JasperFillManager.fillReport(reportsource, params,getCon());

                SwingNode swingNode = new SwingNode();
                swingNode.setContent(new JRViewer(jp));

                AnchorPane anchorPane = new AnchorPane();

                AnchorPane.setTopAnchor(swingNode,0.0);
                AnchorPane.setBottomAnchor(swingNode,0.0);
                AnchorPane.setLeftAnchor(swingNode,0.0);
                AnchorPane.setRightAnchor(swingNode,0.0);

                anchorPane.getChildren().add(swingNode);
                Scene scene = new Scene(anchorPane);
                Stage stage = new Stage();
                        stage.setHeight(550);
                        stage.setWidth(600);
                        stage.setAlwaysOnTop(true);
                        stage.setScene(scene);
                        stage.showAndWait();
于 2018-10-31T03:56:50.057 回答
0

Alternatively how to display a Jasper report inside a javafx stage, scene?

Output HTML from your Jasper report and load the report in a JavaFX WebView.

Make a javafx stage the owner of a JDialog?

I don't think this is possible. What should work instead is to make your application a Swing application and host your JavaFX content inside a JFXPanel inside a Swing JFrame. Then you have no Stage and the owner of the JDialog can be the JFrame hosting the JFXPanel.

于 2012-09-24T14:14:00.140 回答
0

我在 JavaFX 8 中编写了一个 JasperReports 打印预览阶段类。它是纯 JavaFX 代码,不需要使用SwingNode类。

与 JRViewer 相比,它不支持链接和部件,但打印预览窗口无论如何也不需要它。另一方面,代码要短得多,因此很容易理解并进一步满足每个人的需求。

此类的源代码可在GitHub 存储库中免费获得。

于 2015-01-12T10:12:27.647 回答
0

现在可以做到了,
您现在需要的是安装 jdk 8
,因为 javafx 中的 swing 内容是在 jdk8 中引入的

@FXML
private SwingNode swingNode;
...
JasperPrint jasperPrint = JasperFillManager.fillReport(FileName, hash, connect);
swingNode.setContent(new JRViewer(jasperPrint));

oracle 只需为此添加教程,
接下来您可以点击此链接
oracle tutorial embed swing in javaFX

于 2014-11-26T13:39:55.093 回答