如何重复使用或确保一次只存在一个JasperViewer?

时间:2012-08-16 09:50:17

标签: java jasper-reports

我正在创建一个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);
                          }
                        });
                 }
   }

1 个答案:

答案 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);
}