public boolean isCellEditable(int row, int column) {}重写JTable的isCellEditable()方法可以设置JTable是否可以编辑。但是现在,我在界面上想通过按钮来控制JTable是否可以编辑,比如当我按下【编辑】按钮的时候,JTable就进入可编辑状态,再按下【取消】按钮,JTable就不可以编辑了。现在的问题是,jTable这个对象创建完毕后,编辑状态就不可以改变了,除非重画这个jTable。大家有什么好的方法?

解决方案 »

  1.   

    ??即使是用isCellEditable进行判断,怎么会编辑状态就不能改变了?直接的办法就是创建一个变量:private boolean isEditable = false;public boolean isCellEditable(int row, int column) {
        if(!isEditable){
            return isEditable;
        }    ......
    }
      

  2.   

    比如:JTabel jTable = new MyTable();/*这个重写了isCellEditable方法*/ 之后,
    我去改变isEditable标志,jTable就能自动改变编辑状态吗?
    估计是我得自己去重新创建一遍jTable才可以吧?
      

  3.   

    要自己做一个JTextField放入单元格,addFocusListener
    实现focusGained、focusLost等
      

  4.   

    也就是说在CellEditer里面设置是否可以编辑?
    我试一试。
      

  5.   

    你要清楚,public boolean isCellEditable(int row, int column) 这个方法并不是从开始就需要固定的而是JTable在你双击的时候再调用这个方法,如果这次双击时返回了true,下次返回了false,JTable就会在第一次可以编辑,第二次不可以所以你只需要控制好你的isCellEditable方法就可以了,不需要重新创建JTable(如果是这样的设计就太烂了)
      

  6.   

    2楼是正解。
    楼主你说的不会是fireTableCellUpdated这个函数吧?
    这个函数通常放在setValueAt函数中,比如:public void setValueAt(Object value, int row, int col) {
    ...
    fireTableCellUpdated(row, col); // printDebugData();
    }建议看看java tutorial。
      

  7.   

    能不能编辑是由当前Table使用的TableModel决定的,JTable和TableModel是固定了,但是JTable用哪个TableModel是不固定的,就是可以换~table.setModel(tableModel);