জাভাএফএক্স ১১-তে জ্যাস্পার রিপোর্ট তৈরির জন্য আমি গতিশীল প্রতিবেদনগুলি ব্যবহার করছি। আমি সুইং নোডের অভ্যন্তরে প্রতিবেদনটি লোড করছি তবে জ্যাস্পার রিপোর্টটি কেবল তখনই উপস্থিত হয় যখন আমি স্ট্যাক ফলক অঞ্চল এবং অন্যান্য সমস্ত উপাদানগুলিতে ক্লিক করব তবেই যদি আমি all সমস্ত উপাদানগুলির উপর ঘুরে দেখি। উপাদান এবং প্রতিবেদন সামগ্রীগুলি মাউস ঘোরাতে প্রদর্শিত হওয়ার চেয়ে তাত্ক্ষণিকভাবে লোড হচ্ছে না এবং স্ট্যাক ফলকে স্ক্রোল করার সময় প্রতিবেদনটি প্রদর্শিত হচ্ছে।
যেহেতু এটি জাভা 8-তে বাগ ছিল এবং এটি সমাধান হয়ে গেছে বলে মনে হচ্ছে তবে জাভা 11 এও আমি একই সমস্যাটি পাচ্ছি।
হালনাগাদ
যেহেতু আমি কোনও সাড়া পাচ্ছি না এবং ক্লিওপেট্রার পরামর্শ অনুসারে আমি ন্যূনতম প্রজননযোগ্য কোড তৈরি করেছি। দয়া করে এটি দেখুন।
JavaFxJasperReportsDemo.java
package demo;
import java.util.ArrayList;
import java.util.List;
import javax.swing.SwingUtilities;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.embed.swing.SwingNode;
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.AnchorPane;
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;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.swing.JRViewer;
public class JavaFxJasperReportsDemo extends Application{
@FXML
private StackPane stackPane;
public void start(Stage stage) throws Exception{
try{
System.out.println("Hello");
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 {
JasperPrint jasperPrintReport=report.toJasperPrint();
SwingNode swingNode = new SwingNode();
AnchorPane.setTopAnchor(swingNode,0.0);
AnchorPane.setBottomAnchor(swingNode,0.0);
AnchorPane.setLeftAnchor(swingNode,0.0);
AnchorPane.setRightAnchor(swingNode,0.0);
JRViewer jrViewer= new JRViewer(jasperPrintReport);
SwingUtilities.invokeLater(() ->swingNode.setContent(jrViewer)
);
stackPane.getChildren().add(swingNode);
} catch (DRException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
System.out.println("Hello Main");
try{
launch(args);
}
catch (Exception e){
e.printStackTrace();
}
}
}
DemoPOJO.java
package demo;
public class DemoPOJO {
String name;
String city;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
FXMLJavaFXJasperReportsDemo.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.StackPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="561.0" prefWidth="745.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="demo.JavaFxJasperReportsDemo">
<children>
<Label layoutX="345.0" layoutY="24.0" text="Java FX Demo Application" />
<StackPane fx:id="stackPane" layoutX="14.0" layoutY="120.0" prefHeight="392.0" prefWidth="722.0" />
<Button layoutX="62.0" layoutY="68.0" mnemonicParsing="false" onAction="#loadReport" text="Load Report" />
</children>
</AnchorPane>
নির্ভরতাগুলি আমি ব্যবহার করছি: -
<dependency>
<groupId>net.sourceforge.dynamicreports</groupId>
<artifactId>dynamicreports-core</artifactId>
<version>6.1.0</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>11-ea+24</version>
</dependency>
আউটপুট
jbsdk11b125_osx_x64
এবং আমি সমস্যাটি পুনরুত্পাদন করতে পারিনি। এটি সরাসরি সম্পূর্ণ সামগ্রী দেখায়। যদিও আমি একটি সতর্কতা পেয়ে যাচ্ছি জাভাএফএক্স এপিআইএল 11.0.1 সংস্করণের জাভাএফএক্স এপিআই সহ 10.0.2-অভ্যন্তরীণ সংস্করণটি জাভাএফএক্স দ্বারা চালিত ...
org.openjfx:javafx-swing
উদাহরণ ব্যবহার করেছেন , যেমন 11
? 3) জাভা 11.0.5, ম্যাভেন 3.6.2, এবং প্লাগইন org.openjfx:javafx-maven-plugin:0.0.4
ব্যবহার করে এটি সমস্যাগুলি সরবরাহ না করে কাজ করে ( Load Report
বোতামে ক্লিক করার পরে রিপোর্টটি প্রদর্শিত হয় )। অ্যাপ্লিকেশন দিয়ে শুরু হয় mvn clean javafx:run
।