JTable设置列宽、自动调整


下面這個方法 你可以用來設置列寬,在你需要的地方調用一下就可以了

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); 
正解+王道

上一篇:机器学习、深度学习、强化学习课程超级大列表!


下一篇:代码审查的必要性和最佳实践