转:JTable添加单元格改变事件
在使用Jtable得時(shí)候,當(dāng)然是我自己在使用得時(shí)候,查了下API沒有發(fā)現(xiàn)如何監(jiān)聽某個(gè)單元格得值是否被修改過了,如果那位仁兄知道怎么直接添加監(jiān)聽還望多多指教。
JTable得單元格(cell)在渲染得時(shí)候使用得是默認(rèn)得DefaultTableCellRenderer。其返回的Component是繼承了 JLabel得組件,所以直接使用默認(rèn)得渲染器對(duì)其內(nèi)容的更改顯得力不從心。其監(jiān)聽主要在他得CellEditor上面JTable使用的默認(rèn)得編輯器為 JTextField,這樣你就可以重新添加編輯器即繼承DefaultCellEditor然后給其添加一定得監(jiān)聽事件后在對(duì)jtable添加編輯器, 單這樣做我感覺過于過于繁瑣。在單元格進(jìn)行編輯的時(shí)候會(huì)觸發(fā)TablechangEvent 事件,Tablechange事件提供了幾種觸發(fā)事件得類型主要分為:
1.insert
2.update
3.delete
如果要對(duì)其某個(gè)單元格得內(nèi)容是否真得發(fā)生了更改得話只有選擇update類型,但其監(jiān)聽得事件是在你雙擊進(jìn)入編輯狀態(tài)后不管有沒有對(duì)數(shù)據(jù)進(jìn)行更改都會(huì)觸發(fā) 此事件。如果我們能獲得進(jìn)入編輯狀態(tài)前和編輯狀態(tài)完成后得內(nèi)容是很容易確定其內(nèi)容是否真得進(jìn)行過更改得。
首先對(duì)Jtable添加TableModelListener方法如下
JTable t = new JTable();
String oldvalue = null;//定義全局變量用于記錄編輯前得內(nèi)容
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;
*/
}
}
}
});
這樣就可以對(duì)其是否進(jìn)入過編輯狀態(tài)有了監(jiān)聽,然后在給其添加mouselistener就可以對(duì)其進(jìn)去編輯狀態(tài)前得情況進(jìn)行記錄
t.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
//記錄進(jìn)入編輯狀態(tài)前單元格得數(shù)據(jù)
oldvalue = t.getValueAt(t.getSelectedRow(),t.getSelectedColumn()).toString();
}
});
另參考:http://blog.sina.com.cn/s/blog_63e95ee70100nz1p.html
總結(jié)
以上是生活随笔為你收集整理的转:JTable添加单元格改变事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置电脑中文件夹“默认显示模式”为“详细
- 下一篇: 级连删除