2013-07-25 66 views
8

我試圖根據裏面的數據匹配JTable列的寬度。我的代碼:自動調整Jtable列以適應內容

for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){ 
     int width =0; 
    for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) { 
     TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column); 
     Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column); 
     width = Math.max (comp.getPreferredSize().width, width); 
     System.out.println(width); 
    } 
    TableColumn col = new TableColumn(); 
    col = gui.testsuiteInfoTable.getColumnModel().getColumn(column); 
    System.out.println(width); 
    col.setWidth(width); 
    gui.testsuiteInfoTable.revalidate(); 

    } 
} 

大小是正確的我猜,但表中的列仍然是所有具有相同的寬度!該表是嵌入在GridBagLayout的ScrollPane中的問題是什麼?感謝您的任何建議。

+2

看看[鏈接](http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/) –

+0

無法正常工作。 –

回答

5
col.setWidth(width); 

閱讀JTable API,並按照How to Use Tables上的鏈接進行操作。在那篇教程中,他們使用setPreferredWidth(...)來建議列的寬度。

您可能還想看看Table Column Adjuster這是爲您做的。該解決方案還可以考慮列標題的寬度。

+0

謝謝。這個問題似乎是,如果你不把JTable添加到JScrollPane中,那麼setWidth等不起作用。 –

19

這就是你需要:

JTable table = new JTable(){ 
    @Override 
     public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
      Component component = super.prepareRenderer(renderer, row, column); 
      int rendererWidth = component.getPreferredSize().width; 
      TableColumn tableColumn = getColumnModel().getColumn(column); 
      tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth())); 
      return component; 
     } 
    }; 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

該表將自動調整每列的寬度以適應內容。沒有必要控制何時觸發調整大小。

+0

這會起作用,但是如果你不添加它,你會得到一個警告詢問serialVersionUID。 +1。 –

+0

它看起來像表格列被調整到一個更大的值,它不縮小以適應列的當前狀態。 – lordoku

相關問題