我有以下JTable(實際上它是Netbeans的ETable)。它延伸穿過它的容器 - 我想繼續說,而不是使用JTable.AUTO_RESIZE_OFF自動/最適合JTable列,但拉伸最後一列
我想以編程方式適合像下面,調整每列以適應僅單元格內容或列標題文本,並且最右邊的列填充剩餘空間。我怎樣才能做到這一點 ?
我有以下JTable(實際上它是Netbeans的ETable)。它延伸穿過它的容器 - 我想繼續說,而不是使用JTable.AUTO_RESIZE_OFF自動/最適合JTable列,但拉伸最後一列
我想以編程方式適合像下面,調整每列以適應僅單元格內容或列標題文本,並且最右邊的列填充剩餘空間。我怎樣才能做到這一點 ?
您可以關閉自動調整。在這種情況下,列會根據內容自動調整大小。但是在這種情況下,如果總列寬小於表格的寬度,那麼右側會出現空格。如果更大,則會出現水平滾動條。
您可以使用TableColumn.setPreferredWidth
爲每列指定首選寬度。 Swing會根據這一點嘗試分配額外的空間。但是這也不能保證。
您必須將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);
}
看到這個教程:[表列調整器(http://tips4java.wordpress.com/2008/11/10 /表列調整器/) –