2

我正在创建一个 java 桌面应用程序。在应用程序中,我使用动态报告生成报告,并根据报告将生成的某些参数。用户生成第一个报告,然后将其显示在 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);
                          }
                        });
                 }
   }
4

1 回答 1

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);
}
于 2012-08-17T15:22:22.483 回答