public class Test extends JFrame{
  Object[] columnName = {"ssss","sd","sdfsdfs"};
  Object[][] names = {{"dfgr","tete","erwew3"},{"werwr","wer","rttht"},  
                             {"sdfeerht","efe","sdf"}};
  JTable table = new JTable(names,columnName);
  
  public Test(){
    TableColumn mid = table.getColumn(coluName[1]); 
    TableColumn last = table.getColumn(coluName[2]);
    int midWidth = getPreferredWidthForColumn(mid);
    int lastWidth = getPreferredWidthForColumn(last);    
    mid.setMaxWidth = (midWidth);
    last.setMinWidth = (lastWidth);
    table.sizeColumnsTofit(0);  }   public int getPreferredWidthForColumn(TableColumn col){
      int hw = columnHeaderWidth(col); //header Width 计算列头宽度
      int cw = widestCellnColumn(col); //column Width 列宽
      return  hw>cw?hw:cw;
   }   public int columnHeaderWidth(TableColumn col){
      TableCellRenderer renderer = col.getHeaderRenderer();
      Component comp = renderer.getTableCellRendererComponent 
                      (table,col.getHeaderValue(),false,false,0,0);
       return comp.getPreferredSize().width;   }   private int widestCellnColumn(TableColumn col){
      int c = col.getModelIndex();
      int width=0;
      int maxw = 0;
      for(int r=0; r<table.getRowCount; i++){
          TableCellRenderer renderer = table.getCellRenderer(r,c);
          Component comp = renderer.getTableCellRendererComponent
                   (table,table.getValue(r,c),false,false,r,c);
          width = comp.getPreferredSize().width;
          maxw = width>maxw?width:maxw;
       }
       return maxw;
   }
}

解决方案 »

  1.   

    不行呀
    TableCellRenderer renderer = col.getHeaderRenderer();
    中的renderer 总是空指针
      

  2.   

    我写了一个类设置列宽,可是columnHeaderWidth()中的renderer 总是NULL,请教各位高手,谢谢!谢谢
    /** 设置表的列宽,使之与表的内容宽度相适应
     * @author gh
     */
    public class ColWidth {
        
        /** Creates a new instance of ColWitch */
        public ColWidth() {
        }
        
        
        
        /** 设置表的所有列的列宽
         * @param table 要设置的表
         */
        public static void setAllColWith(javax.swing.JTable table){
            if(table != null){
                
                //如果表为空,则不排序
                if(table.getRowCount()==0)
                    return;
                
                int colnumber = table.getColumnCount();
                for(int i=0;i<colnumber;i++){
                    setColWith(table,i);
                }
            }
        }
        
        /** 设置表的列宽
         * @param table 要设置的表
         * @param colnumber 列号
         */
        public static void setColWith(javax.swing.JTable table,int colnumber){
            TableColumn mid = table.getColumnModel().getColumn(colnumber);
            int midWidth = getPreferredWidthForColumn(table,mid);
            mid.setMinWidth(columnHeaderWidth(table,mid)+5);
            mid.setPreferredWidth(midWidth+5);
        }
        
        /** 取得列的默认宽度
         * @param table 表
         * @param col 列号
         * @return int 列宽
         */
        public static int getPreferredWidthForColumn(javax.swing.JTable table,TableColumn col){
            int hw = columnHeaderWidth(table,col); //header Width 计算列头宽度
            int cw = widestCellnColumn(table,col); //column Width 计算列值宽
            return  hw>cw?hw:cw;
        }
        
        
        /** 取得表头的宽度
         * @param table 表
         * @param col 列号
         * @return int 列宽
         */
        public  static int columnHeaderWidth(javax.swing.JTable table,TableColumn col){
            TableCellRenderer renderer = col.getHeaderRenderer();
            
            if(renderer == null)
                return col.getWidth();
            
            Component comp = renderer.getTableCellRendererComponent(table,col.getHeaderValue(),false,false,0,0);
            return comp.getPreferredSize().width;
            
        }
        /** 取得表单元的宽度
         * @param table 表
         * @param col 列号
         * @return int 列宽
         */
        private  static int widestCellnColumn(javax.swing.JTable table,TableColumn col){
            int c = col.getModelIndex();
            int width=0;
            int maxw = 0;
            
            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;
            }
            return maxw;
            
        }
        
    }