2013-07-25 26 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

相关问题