...
 ResultSet rs = st.executeQuery(sql);
 ResultSetMetaData data = rs.getMetaData(); 
 
 for(int i = 1 ; i<= data.getColumnCount() ; i++)
 { 
 
 meta.addElement(data.getColumnName(i)); 
 }
 
 while(rs.next()){
  
     Vector<Object> temp = new Vector<Object>();
     for (int j = 1; j <= meta.size(); j++) {
      temp.addElement(rs.getString(j));
     }
     v.add(temp);
    }
  
 TableModel dataModel = new AbstractTableModel() 
 {public boolean isCellEditable(int row, int col) {return true;}
         public int getColumnCount() { return meta.size(); }
         public int getRowCount() { return v.size();}
         public Object getValueAt(int row, int col) 
        {
          return v.elementAt(row).elementAt(col);
       }
         public void setValueAt(Object aValue, int row, int col) {
        
          v.elementAt(row).set(col,aValue);
             
       }
  };



System.out.println(v.size());


   final  JTable table = new JTable(dataModel);
     table.getModel().addTableModelListener(new TableModelListener(){       public void tableChanged(TableModelEvent e) {
       if(e.getType() == TableModelEvent.UPDATE){
      
System.out.println("OK");//不知道为什么无效
           String newvalue = table.getValueAt(e.getLastRow(),e.getColumn()).toString();
      
     
       }
      
      }
          
         });
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    table.setBounds(50,50,100,100);      JScrollPane scrollpane = new JScrollPane(table);
     scrollpane.setPreferredSize(new Dimension(800,800));
     jf.getContentPane().add(table);
    // jl = new JLabel(table);
  //jf.getContentPane().add(jl); 
    // jf.pack();
     
        jf.setVisible(true);
 } 
 catch(Exception e)
 {
  e.printStackTrace();
 }
      ...
各位帮看看为什么???我是想当表格内容更改了以后在控制台显示ok

解决方案 »

  1.   

    问题出在你更改数据的地方。以setValueAt方法为例。你可以看一下jdk的源码,你的实现比jdk的实现少了些什么?你的监听是有效的,但是,却没有在合适的地方触发。说一下解决的办法:
    在你的setValueAt方法最后补上一句:fireTableCellUpdated(row, column);
    这是defaulttablemodel从abstracttablemodel中继承下来的,作用就是触发一个update事件。
    当然,至于你不加这句,table的展现是没有问题的。至于是否需要触发,可以根据你的需要来定,如果不需要监听也可以不加。但是建议加上。确保一旦需要,即可使用。
      

  2.   

    在setValueAt方法里 你要自己fireTableCellUpdated设计的非常灵活