Java 如何重用或确保一次只存在一个JasperViewer?
我正在创建一个java桌面应用程序。在应用程序中,我使用并基于报告将生成的某些参数生成报告。用户生成第一个报告,然后在jasper查看器中显示。用户最小化jasper查看器并生成下一个报告。然后在新的jasper查看器中查看 因此,每次用户生成报告时,都会创建一个新的jasper查看器。如何重用或确保一次只存在一个JasperViewerJava 如何重用或确保一次只存在一个JasperViewer?,java,jasper-reports,Java,Jasper Reports,我正在创建一个java桌面应用程序。在应用程序中,我使用并基于报告将生成的某些参数生成报告。用户生成第一个报告,然后在jasper查看器中显示。用户最小化jasper查看器并生成下一个报告。然后在新的jasper查看器中查看 因此,每次用户生成报告时,都会创建一个新的jasper查看器。如何重用或确保一次只存在一个JasperViewer JasperPrint print=report.toJasperPrint(); JasperViewer.viewReport(print, false)
JasperPrint print=report.toJasperPrint();
JasperViewer.viewReport(print, false);
之后,我为jasperviewer创建了一个对象
JasperViewer jv;
JasperPrint print;
public void action()
{
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
try
{
report.addColumn(...);
...
...
print=report.toJasperPrint();
jv=new JasperViewer(print,false);
jv.setVisible(true);
}
});
}
}
首先,示例代码不会编译。格式正确后,右括号和分号很快就会出现。它应该是这样的:
JasperViewer jv;
JasperPrint print;
public void action() {
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
report.addColumn(...);
...
...
print=report.toJasperPrint();
jv=new JasperViewer(print,false);
jv.setVisible(true);
}
}
});
}
现在来回答问题JasperViewer
扩展了JFrame
,因此任何通过编程关闭它的技巧也应该适用于JasperViewer
。由于您正在存储对JasperViewer的引用,因此可以检查它是否已经初始化。如果是,则向其发送窗口事件以关闭它
if (jv != null && jv.isVisible()) {
WindowEvent wev = new WindowEvent(jv, WindowEvent.WINDOW_CLOSING);
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev);
}