转:JTable添加单元格改变事件

在使用Jtable得时候,当然是我自己在使用得时候,查了下API没有发现如何监听某个单元格得值是否被修改过了,如果那位仁兄知道怎么直接添加监听还望多多指教。

                

                  JTable得单元格(cell)在渲染得时候使用得是默认得DefaultTableCellRenderer。其返回的Component是继承了 JLabel得组件,所以直接使用默认得渲染器对其内容的更改显得力不从心。其监听主要在他得CellEditor上面JTable使用的默认得编辑器为 JTextField,这样你就可以重新添加编辑器即继承DefaultCellEditor然后给其添加一定得监听事件后在对jtable添加编辑器, 单这样做我感觉过于过于繁琐。在单元格进行编辑的时候会触发TablechangEvent 事件,Tablechange事件提供了几种触发事件得类型主要分为:

             1.insert

             2.update

             3.delete

              如果要对其某个单元格得内容是否真得发生了更改得话只有选择update类型,但其监听得事件是在你双击进入编辑状态后不管有没有对数据进行更改都会触发 此事件。如果我们能获得进入编辑状态前和编辑状态完成后得内容是很容易确定其内容是否真得进行过更改得。

           首先对Jtable添加TableModelListener方法如下

    

     JTable t = new JTable();

     String oldvalue = null;//定义全局变量用于记录编辑前得内容

       t.getModel().addTableModelListener(new TableModelListener(){

   public void tableChanged(TableModelEvent e) {
     if(e.getType() == TableModelEvent.UPDATE){
      /*
       * do some thing 获得编辑后单元格得值
       */

        String newvalue = t.getValueAt(e.getLastRow(),e.getColumn()).toString();

        if(!newvalue.equals(oldvalue)){

          

       /*
        * call the value changed metod;

        */

          }


     }
    
   }
        
       });

     这样就可以对其是否进入过编辑状态有了监听,然后在给其添加mouselistener就可以对其进去编辑状态前得情况进行记录

    t.addMouseListener(new MouseAdapter(){

         public void mouseClicked(MouseEvent e){

           //记录进入编辑状态前单元格得数据

              oldvalue = t.getValueAt(t.getSelectedRow(),t.getSelectedColumn()).toString();

             }     

         });

 

 

另参考:http://blog.sina.com.cn/s/blog_63e95ee70100nz1p.html

原文地址:https://www.cnblogs.com/youxin/p/2798893.html