2014-10-12 33 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