2014-10-12 132 views
0

如何并排打印三个不同的表格或将它们一起添加到一个打印中?因为以下代码单独打印并在不同的页面中打印。 我对JTable的打印方面知之甚少。如何在一份工作中并排打印多张表格?

我正在使用NetBeans 8.0。

或者我可以将数据导入到excel文件并从那里打印?这是否合理? 编辑:所有三张桌子在打印时必须并排在一起,无论其纵向或横向如何。甚至更好,如果所有的表或连接,并由多列代替三个独立的表。

PrinterJob job = PrinterJob.getPrinterJob(); 
PrintRequestAttributeSet asset = new HashPrintRequestAttributeSet(); 
PageFormat pf = job.pageDialog(asset); 
job.setPrintable(new recording_system(), pf); 
boolean ok = job.printDialog(asset); 
if (ok) { 
    try { 
     jTstudents.print(JTable.PrintMode.NORMAL); 
     jTscores.print(JTable.PrintMode.NORMAL); 
     jTresults.print(JTable.PrintMode.NORMAL); 
    } catch (PrinterException ex) { 
     /* The job did not successfully complete */ 
    } 
} 

的表格看起来像这样 Student Recording System

+1

它看起来对我来说,最好的办法可能是使用专用的报告库,如果成本是一个问题,一些开源解决方案可用,可以通过谷歌找到。 – 2014-10-12 14:31:38

+0

你使用netbeans – rert588 2014-10-12 14:43:19

+0

啊,是的,我的确是usng netbeans 8.0 – user3442765 2014-10-12 14:56:17

回答

0

实施组合所有车型的TableModel类。

TableModel model = new ParallelTableModel(jTStudents.getModel(), 
              jTScores.getModel(), 
              TResults.getModel()); 
JTable totalTable = new JTable(model); 

复制表头。 然后totalTable.getPrintable用于打印。

/** 
* Table Model composed from side-by-side table models. 
*/ 
public class ParalleTableModel extends AbstractTableModel { 

    private final TableModel[] models; 

    public ParalleTableModel(TableModel... models) { 
     this.models = models; 
    } 

    @Override 
    public int getRowCount() { 
     return models[0].getRowCount(); 
    } 

    @Override 
    public int getColumnCount() { 
     int count = 0; 
     for (TableModel model : models) { 
      count += model.getColumnCount(); 
     } 
     return count; 
    } 

    @Override 
    public String getColumnName(int columnIndex) { 
     int count = 0; 
     for (TableModel model : models) { 
      int n = model.getColumnCount(); 
      if (columnIndex < count) { 
       return model.getColumnName(columnIndex - count); 
      } 
      count += n; 
     } 
     throw new IndexOutOfBoundsException(); 
    } 

    @Override 
    public Class<?> getColumnClass(int columnIndex) { 
     int count = 0; 
     for (TableModel model : models) { 
      int n = model.getColumnCount(); 
      if (columnIndex < count) { 
       return model.getColumnClass(columnIndex - count); 
      } 
      count += n; 
     } 
     throw new IndexOutOfBoundsException(); 
    } 

    @Override 
    public boolean isCellEditable(int rowIndex, int columnIndex) { 
     int count = 0; 
     for (TableModel model : models) { 
      int n = model.getColumnCount(); 
      if (columnIndex < count) { 
       return model.isCellEditable(rowIndex, columnIndex - count); 
      } 
      count += n; 
     } 
     throw new IndexOutOfBoundsException(); 
    } 

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     int count = 0; 
     for (TableModel model : models) { 
      int n = model.getColumnCount(); 
      if (columnIndex < count) { 
       return model.getValueAt(rowIndex, columnIndex - count); 
      } 
      count += n; 
     } 
     throw new IndexOutOfBoundsException(); 
    } 

    @Override 
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 
     int count = 0; 
     for (TableModel model : models) { 
      int n = model.getColumnCount(); 
      if (columnIndex < count) { 
       model.setValueAt(aValue, rowIndex, columnIndex - count); 
      } 
      count += n; 
     } 
     throw new IndexOutOfBoundsException(); 
    } 
} 
+0

我尝试使用你的代码,但由于我不熟悉tablemodels,我只是摆脱了显示的错误,但我试图运行它,我收到一个异常:线程“AWT-EventQueue-0”java.lang中的异常.IllegalArgumentException:无法设置空TableModel – user3442765 2014-10-14 09:29:35

+0

检查堆栈跟踪,行号,并检查模型的创建,设置和获取时间。可能不会按正确的顺序发生。或者,您可以制作一个制表符分隔的文件,使用Excel扩展名.xls并调用'Desktop.getDesktop()。open(file)'甚至'print'。 – 2014-10-14 09:37:32

+0

那么我用 'totalTable = new javax.swing.JTable();替换了一些代码。 TableModel model = new ParallelTableModel(jTstudents.getModel(),jTscores.getModel(),jTresults.getModel()); JTable totalTable = new JTable(model); totalTable.setModel(model);' 但总表仍然空白 – user3442765 2014-10-14 11:00:17