【问题标题】:How do I reuse or ensure only one JasperViewer exists at a time?如何重复使用或确保一次只存在一个 JasperViewer?
【发布时间】:2012-08-16 09:50:17
【问题描述】:

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

【问题讨论】:

    标签: java jasper-reports


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 2010-09-26
      • 2022-01-16
      • 1970-01-01
      • 2019-05-11
      • 2010-11-23
      • 1970-01-01
      • 2021-02-06
      相关资源
      最近更新 更多