日期:2014-05-20  浏览次数:20641 次

JTable如何设置列的宽度?
我写一个学生管理系统,里面有列,但是自动默认都是同等长度的,有些列是身份证号码需要很长,但是有些是性别,只是一个字符而已,所以我不希望性别的列和身份证列的长度一样,太占空间了,求大神指教下,有什么方法设置宽度?   JDK没查到,没办法!

------解决方案--------------------
/**
     * 自动调整表列宽度
     *
     * @param table          被调整表
     * @param addtionalSpace 额外的宽度
     * @return 总列宽
     */
    public static int fitTableColumnsWidth(JTable table, int addtionalSpace) {
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        JTableHeader header = table.getTableHeader();
        int rowCount = table.getRowCount();

        Enumeration columns = table.getColumnModel().getColumns();
        int totalColumnWidth = 0;
        while (columns.hasMoreElements()) {
            TableColumn column = (TableColumn) columns.nextElement();
            int col = header.getColumnModel().getColumnIndex(column.getIdentifier());
            int width = (int) table.getTableHeader().getDefaultRenderer()
                    .getTableCellRendererComponent(table, column.getIdentifier()
                            , false, false, -1, col).getPreferredSize().getWidth();
            for (int row = 0; row < rowCount; row++) {
                int preferedWidth = (int) table.getCellRenderer(row, col).getTableCellRendererComponent(table,
                        table.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth();
                width = Math.max(width, preferedWidth);
            }
            header.setResizingColumn(column); // this line is very important
            column.setWidth(width + table.getIntercellSpacing().width + addtionalSpace);
            totalColumnWidth += width + table.getIntercellSpacing().width + addtionalSpace;
        }
        return totalColumnWidth;
    }