下面這個方法 你可以用來設置列寬,在你需要的地方調用一下就可以了
Java code
public void FitTableColumns(JTable myTable) { //設置table的列寬隨內容調整
JTableHeader header = myTable.getTableHeader();
int rowCount = myTable.getRowCount();
Enumeration columns = myTable.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn column = (TableColumn) columns.nextElement();
int col = header.getColumnModel().getColumnIndex(
column.getIdentifier());
int width = (int) myTable.getTableHeader().getDefaultRenderer()
.getTableCellRendererComponent(myTable,
column.getIdentifier(), false, false, -1, col)
.getPreferredSize().getWidth();
for (int row = 0; row < rowCount; row++){
int preferedWidth = (int) myTable.getCellRenderer(row, col)
.getTableCellRendererComponent(myTable,
myTable.getValueAt(row, col), false, false,
row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
header.setResizingColumn(column);
column.setWidth(width + myTable.getIntercellSpacing().width);
}
}
方案二:
javax.swing.table.TableColumnModel tcm = jTable1.getColumnModel();
javax.swing.table.TableColumn tc =tcm.getColumn(1);
tc.setPreferredWidth(130);
方案三:
table.getColumn("column name").setMinWidth(width);
table.getColumn("column name").setMaxWidth(width);
table.setColumnsToFit(0); //据说是JTable的bug,必须如此调用
方案四:
and use the following fuction to automatically adjust
private void initColumnSizes(JTable table, MyTableModel model, Object[][] tableData){
TableColumn column = null;
int headerWidth = 0;
int cellWidth = 0;
//resize the first columan size to feet
for(int i = 0; i<1; i++){
column = table.getColumnModel().getColumn(i);
String colName = tmodel.getColumnName(i);
JTextField t = new JTextField(colName);
headerWidth = new Double((t.getPreferredSize().getWidth())).intValue();
for(int j =0; j<tableData.length ; j++){
t = new JTextField(tableData[j][i].toString());
cellWidth = Math.max(cellWidth, t.getPreferredSize().width);
}
column.setPreferredWidth(Math.max(headerWidth, cellWidth));
}
}
//设置JTable水平滚动条
你的代码是不是这样的:
JTable table = new JTable(model);
getContentPane().add(new JScrollPane(table),Border.CENTER);
如果是这样的,你所看到的默认的滚动条并不是JTable的,而是JScrollPane的。
对于JScroolPane类的构造函数JScrollPane(),其垂直和水平滚动条只是在需要的时候才出现,坦白点说就是当JTable的 HEIGHT>JScrollPane的HEIGHT时,垂直滚动条出现;JTable的WIDTH>JScrollPane的WIDTH 时,水平滚动条出现。
若你一定要让水平滚动条出现,可如下:
getContentPane().add(new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS),Border.CENTER);
ps:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
是用来设置JTable的列宽度是否随着JTable的变化而变化。
off固定不变。~
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
正解+王道