如果删除行,那么setValueAt肯定会出问题,因为剩余的列索引可能变成了隐藏的列的索引,这样设置值肯定要出问题了.swing真是太麻烦了.

解决方案 »

  1.   

    模型我用的是AbstractTableModel,不是DefaultTableModel
      

  2.   

    TableColumn  tc  =  this.getColumnModel().getColumn(index);  
                           tc.setMaxWidth(0);  
                           tc.setPreferredWidth(0);  
                           tc.setWidth(0);  
                           tc.setMinWidth(0);  
                             
                           this.getTableHeader().getColumnModel().getColumn(index).setMaxWidth(0);  
                           this.getTableHeader().getColumnModel().getColumn(index).setMinWidth(0);  
      

  3.   

    隐藏列的办法我也找到了。
    隐藏列:
    TableColumnModel columnModel=table.getColumnModel();
    TableColumn column=getColumn(i);
    column.setMinWidth(0);
    column.setMaxWidth(0);//不要直接用setWidth,没用。
    隐藏行还是找不到好办法,行的setWidth最小值是1,不能设成0.
      

  4.   

    我觉得swing设计得很差,控制列的宽度明显是视图的事情,为什么要交给模型去做,应该是jtable去控制,弄得东一块西一块,垃圾。
      

  5.   

    TableColumnModel columnModel=table.getColumnModel();
    TableColumn column=getColumn(i);
    column.setMinWidth(-1);
    column.setMaxWidth(-1);//
    试试宽度设为-1