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

解决方案 »

  1.   

    /**
         * 自动调整表列宽度
         *
         * @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;
        }
      

  2.   

    //取得列的最大长度
    private int getPreferredWidthForCloumn(JTable table,int icol){
    TableColumnModel tcl = table.getColumnModel();
        TableColumn col = tcl.getColumn(icol);
        int c = col.getModelIndex(),width = 0,maxw = 0;
        int[] iniCW = new int[table.getColumnCount()];
        for(int r=0;r<table.getRowCount();++r){       TableCellRenderer renderer = table.getCellRenderer(r,c);
          Component comp = renderer.getTableCellRendererComponent(table,table.getValueAt(r,c),false,false,r,c);
          width = comp.getPreferredSize().width;
          maxw = width > maxw?width:maxw;
        }
        // 设定每列的宽度为当列的最大的宽度。
        for(int i= 0; i<table.getColumnCount(); i++){
          int with = this.getPreferredWidthForCloumn(table,i) + 10;
          with = iniCW[i] > with ? iniCW[i] : with;
          table.getColumnModel().getColumn(i).setPreferredWidth(with);
        }
    }
    找到这串代码,却爆Multiple ers at this line 这错误,不知道怎么用!