[英]Why JasperViewer (Swing based component) is not dispaying report at JavaFX project?
我有2個運行JasperReports的項目。 一種運行在JavaFX上,另一種運行在純Java和主類上。 現在,如果我運行普通的Java項目,jasperReport可以工作並顯示(通過JasperViewer類),但是對於JavaFX項目,它可以工作,但是單擊按鈕后沒有報告顯示。
為什么它不能用於普通Java類,卻不能用於JavaFX?
我該怎么做才能使其在JavaFX中工作?
除了JavaFx和純Java,其他所有內容都是相同的。 我為此下載了以下jar文件:
共用消化池2.1.jar
公地收藏3.2.2.jar
以下是項目:
NO.1。 JavaFX的:
DynaReportApp.java類
package jasperreport;
import java.util.ArrayList;
import java.util.Collection;
public class DynaReportApp {
public DynaReportApp() {
}
public EmployeeReport start() {
Collection<Employee> list = new ArrayList<>();
list.add(new Employee(101, "Ravinder Shah", 67000, (float) 2.5));
list.add(new Employee(102, "John Smith", 921436, (float) 9.5));
list.add(new Employee(103, "Kenneth Johnson", 73545, (float) 1.5));
list.add(new Employee(104, "John Travolta", 43988, (float) 0.5));
list.add(new Employee(105, "Peter Parker", 93877, (float) 3.5));
list.add(new Employee(106, "Leonhard Euler", 72000, (float) 2.3));
list.add(new Employee(107, "William Shakespeare", 33000, (float) 1.4));
list.add(new Employee(108, "Arup Bindal", 92000, (float) 6.2));
list.add(new Employee(109, "Arin Kohfman", 55000, (float) 8.5));
list.add(new Employee(110, "Albert Einstein", 89000, (float) 8.2));
EmployeeReport report = new EmployeeReport(list);
return report;
}
}
Employee.java類
package jasperreport;
public class Employee {
private int empNo;
private String name;
private int salary;
private float commission;
public Employee() {
}
public Employee(int empNo, String name, int salary, float commission) {
this.empNo = empNo;
this.name = name;
this.salary = salary;
this.commission = salary*commission;
}
public int getEmpNo() {
return empNo;
}
public void setEmpNo(int empNo) {
this.empNo = empNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public float getCommission() {
return commission;
}
public void setCommission(float commission) {
this.commission = commission;
}
}
EmployeeReport.java類
package jasperreport;
import ar.com.fdvs.dj.core.DynamicJasperHelper;
import ar.com.fdvs.dj.core.layout.ClassicLayoutManager;
import ar.com.fdvs.dj.domain.DynamicReport;
import ar.com.fdvs.dj.domain.Style;
import ar.com.fdvs.dj.domain.builders.ColumnBuilder;
import ar.com.fdvs.dj.domain.builders.ColumnBuilderException;
import ar.com.fdvs.dj.domain.builders.DynamicReportBuilder;
import ar.com.fdvs.dj.domain.builders.StyleBuilder;
import ar.com.fdvs.dj.domain.constants.Border;
import ar.com.fdvs.dj.domain.constants.Font;
import ar.com.fdvs.dj.domain.constants.HorizontalAlign;
import ar.com.fdvs.dj.domain.constants.Transparency;
import ar.com.fdvs.dj.domain.constants.VerticalAlign;
import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Collection;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class EmployeeReport {
private final Collection<Employee> list = new ArrayList<>();
public EmployeeReport(Collection<Employee> c) {
list.addAll(c);
}
public JasperPrint getReport() throws ColumnBuilderException, JRException, ClassNotFoundException {
Style headerStyle = createHeaderStyle();
Style detailTextStyle = createDetailTextStyle();
Style detailNumberStyle = createDetailNumberStyle();
DynamicReport dynaReport = getReport(headerStyle, detailTextStyle,detailNumberStyle);
JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dynaReport, new ClassicLayoutManager(), new JRBeanCollectionDataSource(list));
return jp;
}
private Style createHeaderStyle() {
StyleBuilder sb=new StyleBuilder(true);
sb.setFont(Font.VERDANA_MEDIUM_BOLD);
sb.setBorder(Border.THIN());
sb.setBorderBottom(Border.PEN_2_POINT());
sb.setBorderColor(Color.BLACK);
sb.setBackgroundColor(Color.ORANGE);
sb.setTextColor(Color.BLACK);
sb.setHorizontalAlign(HorizontalAlign.CENTER);
sb.setVerticalAlign(VerticalAlign.MIDDLE);
sb.setTransparency(Transparency.OPAQUE);
return sb.build();
}
private Style createDetailTextStyle(){
StyleBuilder sb=new StyleBuilder(true);
sb.setFont(Font.VERDANA_MEDIUM);
sb.setBorder(Border.DOTTED());
sb.setBorderColor(Color.BLACK);
sb.setTextColor(Color.BLACK);
sb.setHorizontalAlign(HorizontalAlign.LEFT);
sb.setVerticalAlign(VerticalAlign.MIDDLE);
sb.setPaddingLeft(5);
return sb.build();
}
private Style createDetailNumberStyle(){
StyleBuilder sb=new StyleBuilder(true);
sb.setFont(Font.VERDANA_MEDIUM);
sb.setBorder(Border.DOTTED());
sb.setBorderColor(Color.BLACK);
sb.setTextColor(Color.BLACK);
sb.setHorizontalAlign(HorizontalAlign.RIGHT);
sb.setVerticalAlign(VerticalAlign.MIDDLE);
sb.setPaddingRight(5);
return sb.build();
}
private AbstractColumn createColumn(String property, Class type,
String title, int width, Style headerStyle, Style detailStyle)
throws ColumnBuilderException {
AbstractColumn columnState = ColumnBuilder.getNew()
.setColumnProperty(property, type.getName()).setTitle(
title).setWidth(Integer.valueOf(width))
.setStyle(detailStyle).setHeaderStyle(headerStyle).build();
return columnState;
}
private DynamicReport getReport(Style headerStyle, Style detailTextStyle, Style detailNumStyle) throws ColumnBuilderException, ClassNotFoundException {
DynamicReportBuilder report=new DynamicReportBuilder();
AbstractColumn columnEmpNo = createColumn("empNo", Integer.class,"Employee Number", 30, headerStyle, detailTextStyle);
AbstractColumn columnName = createColumn("name", String.class,"Name", 30, headerStyle, detailTextStyle);
AbstractColumn columnSalary = createColumn("salary", Integer.class,"Salary", 30, headerStyle, detailNumStyle);
AbstractColumn columnCommission = createColumn("commission", Float.class,"Commission", 30, headerStyle, detailNumStyle);
report.addColumn(columnEmpNo)
.addColumn(columnName).addColumn(columnSalary).addColumn(columnCommission);
StyleBuilder titleStyle=new StyleBuilder(true);
titleStyle.setHorizontalAlign(HorizontalAlign.CENTER);
titleStyle.setFont(new Font(20, Font._FONT_GEORGIA, true));
StyleBuilder subTitleStyle=new StyleBuilder(true);
subTitleStyle.setHorizontalAlign(HorizontalAlign.CENTER);
subTitleStyle.setFont(new Font(Font.MEDIUM, Font._FONT_GEORGIA, true));
report.setTitle("Employee Report");
report.setTitleStyle(titleStyle.build());
report.setSubtitle("Commission received by Employee");
report.setSubtitleStyle(subTitleStyle.build());
report.setUseFullPageWidth(true);
return report.build();
}
}
JasperReport.java
package jasperreport;
import ar.com.fdvs.dj.domain.builders.ColumnBuilderException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
public class JasperReport extends Application {
@Override
public void start(Stage primaryStage) {
AnchorPane root = new AnchorPane();
Button button = new Button("Button");
button.setOnAction(event -> {
try {
DynaReportApp dynaReportApp = new DynaReportApp();
JasperPrint jp = dynaReportApp.start().getReport();
JasperViewer jasperViewer = new JasperViewer(jp);
jasperViewer.setVisible(true);
JasperViewer.viewReport(jp, false);
} catch (JRException | ColumnBuilderException | ClassNotFoundException ex) {
System.out.println( ex);
}
});
root.getChildren().addAll(button);
Scene scene = new Scene(root, 400, 250);
primaryStage.setTitle("JasperReport");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
NO.2。 普通Java
Employee.java
package jasperreporttest;
public class Employee {
private int empNo;
private String name;
private int salary;
private float commission;
public Employee() {
}
public Employee(int empNo, String name, int salary, float commission) {
this.empNo = empNo;
this.name = name;
this.salary = salary;
this.commission = salary*commission;
}
public int getEmpNo() {
return empNo;
}
public void setEmpNo(int empNo) {
this.empNo = empNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public float getCommission() {
return commission;
}
public void setCommission(float commission) {
this.commission = commission;
}
}
EmployeeReport.java
package jasperreporttest;
import ar.com.fdvs.dj.core.DynamicJasperHelper;
import ar.com.fdvs.dj.core.layout.ClassicLayoutManager;
import ar.com.fdvs.dj.domain.DynamicReport;
import ar.com.fdvs.dj.domain.Style;
import ar.com.fdvs.dj.domain.builders.ColumnBuilder;
import ar.com.fdvs.dj.domain.builders.ColumnBuilderException;
import ar.com.fdvs.dj.domain.builders.DynamicReportBuilder;
import ar.com.fdvs.dj.domain.builders.StyleBuilder;
import ar.com.fdvs.dj.domain.constants.Border;
import ar.com.fdvs.dj.domain.constants.Font;
import ar.com.fdvs.dj.domain.constants.HorizontalAlign;
import ar.com.fdvs.dj.domain.constants.Transparency;
import ar.com.fdvs.dj.domain.constants.VerticalAlign;
import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Collection;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class EmployeeReport {
private final Collection<Employee> list = new ArrayList<>();
public EmployeeReport(Collection<Employee> c) {
list.addAll(c);
}
public JasperPrint getReport() throws ColumnBuilderException, JRException, ClassNotFoundException {
Style headerStyle = createHeaderStyle();
Style detailTextStyle = createDetailTextStyle();
Style detailNumberStyle = createDetailNumberStyle();
DynamicReport dynaReport = getReport(headerStyle, detailTextStyle,detailNumberStyle);
JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dynaReport, new ClassicLayoutManager(), new JRBeanCollectionDataSource(list));
return jp;
}
private Style createHeaderStyle() {
StyleBuilder sb=new StyleBuilder(true);
sb.setFont(Font.VERDANA_MEDIUM_BOLD);
sb.setBorder(Border.THIN());
sb.setBorderBottom(Border.PEN_2_POINT());
sb.setBorderColor(Color.BLACK);
sb.setBackgroundColor(Color.ORANGE);
sb.setTextColor(Color.BLACK);
sb.setHorizontalAlign(HorizontalAlign.CENTER);
sb.setVerticalAlign(VerticalAlign.MIDDLE);
sb.setTransparency(Transparency.OPAQUE);
return sb.build();
}
private Style createDetailTextStyle(){
StyleBuilder sb=new StyleBuilder(true);
sb.setFont(Font.VERDANA_MEDIUM);
sb.setBorder(Border.DOTTED());
sb.setBorderColor(Color.BLACK);
sb.setTextColor(Color.BLACK);
sb.setHorizontalAlign(HorizontalAlign.LEFT);
sb.setVerticalAlign(VerticalAlign.MIDDLE);
sb.setPaddingLeft(5);
return sb.build();
}
private Style createDetailNumberStyle(){
StyleBuilder sb=new StyleBuilder(true);
sb.setFont(Font.VERDANA_MEDIUM);
sb.setBorder(Border.DOTTED());
sb.setBorderColor(Color.BLACK);
sb.setTextColor(Color.BLACK);
sb.setHorizontalAlign(HorizontalAlign.RIGHT);
sb.setVerticalAlign(VerticalAlign.MIDDLE);
sb.setPaddingRight(5);
return sb.build();
}
private AbstractColumn createColumn(String property, Class type,
String title, int width, Style headerStyle, Style detailStyle)
throws ColumnBuilderException {
AbstractColumn columnState = ColumnBuilder.getNew()
.setColumnProperty(property, type.getName()).setTitle(
title).setWidth(Integer.valueOf(width))
.setStyle(detailStyle).setHeaderStyle(headerStyle).build();
return columnState;
}
private DynamicReport getReport(Style headerStyle, Style detailTextStyle, Style detailNumStyle) throws ColumnBuilderException, ClassNotFoundException {
DynamicReportBuilder report=new DynamicReportBuilder();
AbstractColumn columnEmpNo = createColumn("empNo", Integer.class,"Employee Number", 30, headerStyle, detailTextStyle);
AbstractColumn columnName = createColumn("name", String.class,"Name", 30, headerStyle, detailTextStyle);
AbstractColumn columnSalary = createColumn("salary", Integer.class,"Salary", 30, headerStyle, detailNumStyle);
AbstractColumn columnCommission = createColumn("commission", Float.class,"Commission", 30, headerStyle, detailNumStyle);
report.addColumn(columnEmpNo)
.addColumn(columnName).addColumn(columnSalary).addColumn(columnCommission);
StyleBuilder titleStyle=new StyleBuilder(true);
titleStyle.setHorizontalAlign(HorizontalAlign.CENTER);
titleStyle.setFont(new Font(20, Font._FONT_GEORGIA, true));
StyleBuilder subTitleStyle=new StyleBuilder(true);
subTitleStyle.setHorizontalAlign(HorizontalAlign.CENTER);
subTitleStyle.setFont(new Font(Font.MEDIUM, Font._FONT_GEORGIA, true));
report.setTitle("Employee Report");
report.setTitleStyle(titleStyle.build());
report.setSubtitle("Commission received by Employee");
report.setSubtitleStyle(subTitleStyle.build());
report.setUseFullPageWidth(true);
return report.build();
}
}
JasperReportTest
package jasperreporttest;
import ar.com.fdvs.dj.domain.builders.ColumnBuilderException;
import java.util.ArrayList;
import java.util.Collection;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
public class JasperReportTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Collection<Employee> list = new ArrayList<>();
list.add(new Employee(101, "Ravinder Shah", 67000, (float) 2.5));
list.add(new Employee(102, "John Smith", 921436, (float) 9.5));
list.add(new Employee(103, "Kenneth Johnson", 73545, (float) 1.5));
list.add(new Employee(104, "John Travolta", 43988, (float) 0.5));
list.add(new Employee(105, "Peter Parker", 93877, (float) 3.5));
list.add(new Employee(106, "Leonhard Euler", 72000, (float) 2.3));
list.add(new Employee(107, "William Shakespeare", 33000, (float) 1.4));
list.add(new Employee(108, "Arup Bindal", 92000, (float) 6.2));
list.add(new Employee(109, "Arin Kohfman", 55000, (float) 8.5));
list.add(new Employee(110, "Albert Einstein", 89000, (float) 8.2));
EmployeeReport report = new EmployeeReport(list);
try {
JasperPrint jp = report.getReport();
JasperViewer jasperViewer = new JasperViewer(jp);
jasperViewer.setVisible(true);
} catch (JRException | ColumnBuilderException | ClassNotFoundException ex) {
}
}
}
好吧,這真是過山車,但是我終於找到了解決方案,希望它對其他人也有幫助。 因此,顯然上述方法是正確的。 一切都是正確的。 唯一缺少的是jasper-compliler-jdlt 5.5.23.jar
。 因此,只要您具有上述所有罐子,它都應該起作用。 我還注意到,由於某種原因,如果您使用更高的DynamicJasper版本(如5.1.1),則整個操作將無法正常進行。 因此,只需嘗試保留以下jar文件(完整的jar文件列表可在下面找到)以及上述實現,就可以了。 歡呼和快樂的編碼:)
jar文件列表
DynamicJasper 5.0.5. jar
commons-beanutils 1.9.2.jar
commons-collections 3.2.2.jar
commons-digester 2.1.jar
commons-logging 1.2.jar
jasperreports 5.6.0.jar or jasperreports 6.0.0.ar
jasper-compliler-jdlt 5.5.23.jar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.