2

Java デスクトップ アプリケーションを作成しています。アプリケーションでは、動的レポートを使用してレポートを生成し、レポートが生成するいくつかのパラメーターに基づいています。ユーザーが最初のレポートを生成すると、ジャスパー ビューアに表示されます。ユーザーは jasper ビューアを最小化し、次のレポートを生成します。その後、新しいジャスパー ビューアで表示されます。

したがって、ユーザーがレポートを生成するたびに、新しい jasper ビューアーが作成されます。一度に 1 つの 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 に答える