【发布时间】:2019-10-27 16:51:39
【问题描述】:
为了在 JavaFX 11 中创建 Jasper 报告,我使用的是动态报告。当我单击按钮 Jasper Report 打开并在弹出窗口中可见时。但是我可以根据需要多次单击该按钮,并且报告将打开这些次数。但是一旦jasper报告可见,我想锁定父窗口,以便只有在关闭弹出窗口后才能访问父窗口。正如question 中所解释的,我们可以在父窗口和子窗口中实现同样的事情,但我想用 Parent 实现类似的事情,因为我的舞台和孩子是 Jasper 窗口。下面提到了相同的代码:-
JavaFxJasperReportsDemo.java
package demo;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;
import net.sf.dynamicreports.report.builder.DynamicReports;
import net.sf.dynamicreports.report.builder.column.Columns;
import net.sf.dynamicreports.report.builder.component.Components;
import net.sf.dynamicreports.report.builder.datatype.DataTypes;
import net.sf.dynamicreports.report.constant.HorizontalTextAlignment;
import net.sf.dynamicreports.report.exception.DRException;
public class JavaFxJasperReportsDemo extends Application{
@FXML
private StackPane stackPane;
public void start(Stage stage) throws Exception{
try{
Parent root = FXMLLoader.load(getClass().getResource("/FXMLJavaFXJasperReportsDemo.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Java FX Demo");
stage.show();
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent arg0) {
Platform.exit();
}
});
}
catch (Exception e){
throw e;
}
}
@FXML
public void loadReport(ActionEvent event) {
JasperReportBuilder report = DynamicReports.report();
List<DemoPOJO> lstDemoPOJOs=new ArrayList<DemoPOJO>();
DemoPOJO demoPOJO=new DemoPOJO();
demoPOJO.setName("ABC");
demoPOJO.setCity("Delhi");
lstDemoPOJOs.add(demoPOJO);
demoPOJO = new DemoPOJO();
demoPOJO.setName("XYZ");
demoPOJO.setCity("Agra");
lstDemoPOJOs.add(demoPOJO);
report
.columns(
Columns.columnRowNumberColumn("S No"),
Columns.column("Name", "name", DataTypes.stringType()),
Columns.column("Address", "city", DataTypes.stringType())
).title(
Components.text("Demo Java Fx Jasper Reports").
setHorizontalTextAlignment(HorizontalTextAlignment.CENTER))
.pageFooter(Components.pageXofY())
.setDataSource(lstDemoPOJOs);
try {
report.show(false);
} catch (DRException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
try{
launch(args);
}
catch (Exception e){
e.printStackTrace();
}
}
}
【问题讨论】:
-
您可以使用像 github.com/mgrecol/JasperViewerFx 这样的 JavaFx 查看器。比设置
Modality.WINDOW_MODAL -
@Raw 您能否展示一个示例以及如何在现有 JavaFx 项目中使用 JasperViewerFx。是否有任何 maven 依赖项或相同的任何外部 jar 文件
-
您可以下载源代码并将它们添加到您的项目中,只需更改
JRViewerFx->start()函数。添加primaryStage.initOwner(owner); primaryStage.initModality(Modality.WINDOW_MODAL);
标签: javafx jasper-reports