2011-06-24 57 views
5

我有以下JTable(實際上它是Netbeans的ETable)。它延伸穿過它的容器 - 我想繼續說,而不是使用JTable.AUTO_RESIZE_OFF自動/最適合JTable列,但拉伸最後一列

enter image description here

我想以編程方式適合像下面,調整每列以適應僅單元格內容或列標題文本,並且最右邊的列填充剩餘空間。我怎樣才能做到這一點 ?

enter image description here

+0

看到這個教程:[表列調整器(http://tips4java.wordpress.com/2008/11/10 /表列調整器/) –

回答

0

您可以關閉自動調整。在這種情況下,列會根據內容自動調整大小。但是在這種情況下,如果總列寬小於表格的寬度,那麼右側會出現空格。如果更大,則會出現水平滾動條。

您可以使用TableColumn.setPreferredWidth爲每列指定首選寬度。 Swing會根據這一點嘗試分配額外的空間。但是這也不能保證。

0

您必須將autoResize設置爲OFF(setAutoResizeMode(JTable.AUTO_RESIZE_OFF);),但您還需要幫助器方法來調整列的大小。

這是擴展JTable中自定義類裏面,但你可以很容易地引用現有的JTable:每當你添加一行

public void resizeColumnWidth() { 
    int cumulativeActual = 0; 
    int padding = 15; 
    for (int columnIndex = 0; columnIndex < getColumnCount(); columnIndex++) { 
     int width = 50; // Min width 
     TableColumn column = columnModel.getColumn(columnIndex); 
     for (int row = 0; row < getRowCount(); row++) { 
      TableCellRenderer renderer = getCellRenderer(row, columnIndex); 
      Component comp = prepareRenderer(renderer, row, columnIndex); 
      width = Math.max(comp.getPreferredSize().width + padding, width); 
     } 
     if (columnIndex < getColumnCount() - 1) { 
      column.setPreferredWidth(width); 
      cumulativeActual += column.getWidth(); 
     } else { //LAST COLUMN 
      //Use the parent's (viewPort) width and subtract the previous columbs actual widths. 
      column.setPreferredWidth((int) getParent().getSize().getWidth() - cumulativeActual); 
     } 
    } 
} 

呼叫resizeColumnWidth()。

任選地收聽者添加到表中,使得當表本身調整大小列也調整:

public MyCustomJTable() { 
    super(); 
    addHierarchyBoundsListener(new HierarchyBoundsAdapter() { 
     @Override 
     public void ancestorResized(HierarchyEvent e) { 
      super.ancestorResized(e); 
      resizeColumnWidth(); 
     } 
    }); 
    setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
}