我也想知道这个问题。在JTable中把focusable设为false之后,默认的是双击一个cell的时候开始进入编辑状态。但是在编辑完或放弃编辑后,单击其他区域的时候会抛出很多异常。即那个cell仍处于编辑状态,那个黑框取消不掉。下面是我的代码:
}else if (clickCount == 1){
     if (isEditing()){
          int row_edit =getEditingRow(); //获取正在编辑的行
          int col_edit =getEditingColumn();  //获取正在编辑的列          Rectangle rect = getCellRect(row_edit, col_edit, false); //得到所在行列的巨型区域
          if (!rect.contains(p)){ //p是鼠标所在点
              try{
                 CellEditor ce = getCellEditor(row_edit, col_edit); 
                 ce.stopCellEditing();
                 Object value = ce.getCellEditorValue();
                 FileListTableModel tableModel = getDefaultModel();  
                 tableModel.setValueAt(value, row_edit, col_edit);
                 tableModel.fireTableDataChanged();   
              }catch(Exception evt){
                 System.out.println("error: "+ evt.getMessage()+"\n"+
                                    "source: "+ evt.getCause()+"\n"+
                                    "stack trace: ");
                 evt.printStackTrace();              }          }else{
              return;
          }
      }else{
      .........................
      }

解决方案 »

  1.   

    int row = table.getSelectedRow(); 
    int col = table.getSelectedColumn(); 
    table.getCellEditor(row, col).stopCellEditing();
    Object o = table.getValueAt(row, col);
      

  2.   

    to caeserwliu (白云) :你得那个问题可以解决,我上面得代码没有任何错误。我之所以出现那个问题是因为我覆盖了editingStopped()函数才会出现那个问题,现在我已经解决了。你不要覆盖editingStopped()方法(否则话,编辑后cell周围仍有那个黑框,且处于编辑状态),在第二步判断如果正处于编辑状态。则用以下代码:
    --------------------------------CellEditor ce = JTable.getCellEditor(row_edit, col_edit); 
    ce.stopCellEditing();
    Object value = ce.getCellEditorValue();
    DefaultTableModel tableModel = (DefaultTableModel)JTable.getDefaultModel();  
    tableModel.setValueAt(value, row_edit, col_edit);--------------------------------
    TableCellEditor中没有getValue()这个函数。的调用CellEditor.getCellEditorValue()
    获取编辑后得新值,然后在TableModel中用
    setValueAt(Object aValue, int rowIndex, int columnIndex) 保存编辑后得值,
    然后用tableModel.fireTableDataChanged(); 刷新JTable。
      

  3.   

    学习,能不能把较为完整的代码贴出来看看,不需要所有的代码,与JTable有关的就行。