【问题标题】:How to make jasper report top of JDialog?如何使碧玉报告JDialog的顶部?
【发布时间】:2015-07-17 04:32:09
【问题描述】:

我使用 Netbeans 的 jasper 报告插件制作报告,我使用 JDialog 中的一个按钮来显示我的 jasper 报告。但是报告显示在我的 JDialog 上,这里有什么问题?

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                                
    // TODO add your handling code here:
    Map<String, Object> params = new HashMap <>();
    try {
        Connection kon = DriverManager.getConnection(database,user,pass);
        JasperDesign jasperDesign = JRXmlLoader.load("Myreports.jrxml");
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, kon);
        JasperViewer jasperViewer = new JasperViewer(jasperPrint, false); 
        jasperViewer.setTitle("My Reports");
        jasperViewer.setVisible(true);
    } catch (SQLException | JRException e){
        e.printStackTrace();
    }
}

我是这样添加 setModal 的:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                                
    // TODO add your handling code here:
    Map<String, Object> params = new HashMap <>();
    try {
        Connection kon = DriverManager.getConnection(database,user,pass);
        JasperDesign jasperDesign = JRXmlLoader.load("Myreports.jrxml");
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, kon);
        JasperViewer jasperViewer = new JasperViewer(jasperPrint, false); 
        jasperViewer.setTitle("My Reports");
        setModal(false);
        jasperViewer.setVisible(true);
        setModal(true);
    } catch (SQLException | JRException e){
        e.printStackTrace();
    }
}

我的报告在 JDialog 上显示在顶部,但其中没有任何按钮起作用。

【问题讨论】:

    标签: jasper-reports jdialog jasper-plugin


    【解决方案1】:

    您可以使用此代码使 JR 显示为 JDialog:

    //after creating jasperViewer//
    jasperViewer = new JasperViewer(jasperPrint, false);
    JDialog dialog = new JDialog(this);//the owner
    dialog.setContentPane(jasperViewer.getContentPane());
    dialog.setSize(jasperViewer.getSize());
    dialog.setTitle("XXXXX");
    dialog.setIconImage(Toolkit.getDefaultToolkit().getImage(
    getClass().getResource("URL IMG")));
    dialog.setVisible(true);
    

    【讨论】:

      【解决方案2】:

      根据 Jasperviewer 的内容创建一个 Dialog

      import java.awt.BorderLayout;
      import java.awt.Toolkit;
      
      import javax.swing.JDialog;
      import javax.swing.JPanel;
      
      import net.sf.jasperreports.engine.DefaultJasperReportsContext;
      import net.sf.jasperreports.engine.JasperPrint;
      
      public class ReportViewer extends JDialog {
      
          private static final long serialVersionUID = 1L;
      
          protected net.sf.jasperreports.swing.JRViewer viewer;
          private JPanel pnlMain;
      
          public ReportViewer(JDialog parent, JasperPrint jasperPrint) {
              super(parent, Boolean.TRUE);
      
              initComponents();
      
              this.viewer = new net.sf.jasperreports.swing.JRViewer(DefaultJasperReportsContext.getInstance(), jasperPrint,
                      null, null);
      
              this.pnlMain.add(this.viewer, BorderLayout.CENTER);
      
          }
      
          private void initComponents() {
              pnlMain = new javax.swing.JPanel();
      
              setTitle("JasperViewer");
              setIconImage(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/jricon.GIF"))
                      .getImage());
              addWindowListener(new java.awt.event.WindowAdapter() {
                  @Override
                  public void windowClosing(java.awt.event.WindowEvent evt) {
                      exitForm();
                  }
              });
      
              pnlMain.setLayout(new java.awt.BorderLayout());
      
              getContentPane().add(pnlMain, java.awt.BorderLayout.CENTER);
      
              pack();
      
              Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
              java.awt.Dimension screenSize = toolkit.getScreenSize();
              int screenResolution = toolkit.getScreenResolution();
              float zoom = ((float) screenResolution) / net.sf.jasperreports.swing.JRViewerPanel.REPORT_RESOLUTION;
      
              int height = (int) (550 * zoom);
      
              if (height > screenSize.getHeight()) {
                  height = (int) screenSize.getHeight();
              }
      
              int width = (int) (750 * zoom);
              if (width > screenSize.getWidth()) {
                  width = (int) screenSize.getWidth();
              }
      
              java.awt.Dimension dimension = new java.awt.Dimension(width, height);
              setSize(dimension);
              setLocation((screenSize.width - width) / 2, (screenSize.height - height) / 2);
      
          }
      
          private void exitForm() {
      
              this.setVisible(false);
              this.viewer.clear();
              this.viewer = null;
              this.getContentPane().removeAll();
              this.dispose();
      
          }
      
      }
      

      然后在模态框架上调用查看器自定义

      new ReportViewer(this, jasperPrint).setVisible(Boolean.TRUE);
      

      【讨论】:

        【解决方案3】:

        不要创建JDialog 单独使用:

        JasperViewer的方法。
        setAlwaysOnTop(true);
        JasperViewerextends JFrame{}

        JasperViewer jasperViewer = new JasperViewer(jasperPrint, false); 
          jasperViewer.setTitle("My Reports");
          setModal(false);
          jasperViewer.setAlwaysOnTop(true);  //here
          jasperViewer.setVisible(true);
          setModal(true);
        

        它总是在JDialog之上,即使是每个打开的窗口。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多