我正在创建一个java桌面应用程序。在应用程序中,我使用dynamic report生成报告,并基于报告将生成的某些参数。用户生成第一个报告,然后在jasper查看器中显示。用户最小化jasper查看器并生成下一个报告。然后在新的jasper观察器中查看。
因此,每次用户生成报告时,都会创建一个新的jasper查看器。如何重用或确保一次只存在一个JasperViewer?
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);
}
});
}
}
答案 0 :(得分:1)
刚开始,您的示例代码无法编译。一旦格式正确,您会看到右括号和分号很快就会发生。它应该看起来像:
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);
}