转: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
總結
以上是生活随笔為你收集整理的转:JTable添加单元格改变事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置电脑中文件夹“默认显示模式”为“详细
- 下一篇: 级连删除