我想对单元格改变进行监听,来实现历史记录,用了JDK上的方法但是存在问题
table.getModel().addTableModelListener(new MyTableModelListener());MyTableModelListener内容: public void tableChanged(TableModelEvent e) {
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);        ...// Do something with the data...
    }问题在于只要单元格的值发生变化,MyTableModelListener就会监听到,但是单元格的值发生变化有2种情况:一是我双击单元格,编辑完后选定别的格退出编辑状态时产生TableModelEvent,这也是我想要监听的事件,二是我其他的地方用了些button,按button时会改Table的内容,这时也产生了TableModelEvent
我要怎么样才能区分这2总情况,只对第一总情况进行处理?

解决方案 »

  1.   

    // 自己添加要监视的列
    TableCellEditor editor = table.getDefaultEditor(Class<?>);
    editor.addCellEditorListener(
        new CellEditorListener() {
            public void editingCanceled(ChangeEvent e){
                ...
            }
            public void editingStopped(ChangeEvent e){
                ...
            }
        });
      

  2.   

    还是有些问题
    public void editingCanceled(ChangeEvent e){
    System.out.println("aaaa");
    }
    public void editingStopped(ChangeEvent e){
             System.out.println("bbbb");
    }当编辑完后,如果单元格里还有字会打印一遍"bbbb",如果单元格里没有字了会打印两遍"bbbb"!但是"aaaa"打印不出来.
      

  3.   

    你可以加个变量来区分按钮的情况。假如用0、1来判断
    点按钮-》变量为1-》改变Table-》触发监听代码-》判断变量,为1就不执行后续代码-》变量改回为0