有一个defaulttablemodel的JTable 通过addMouseListener new MouseAdapter() public void mouseClicked(MouseEvent e) 得到某单元格改变前的值a1addTableModelListener tableValueChanged(TableModelEvent evt) 可以得到某单元格改变后的值a2如果a2的值是非法的修改,就把该单元格的值恢复为a1怎么实现撒
解决方案 »
- 新手求意见 定义的一学生类,并创建类的对象。
- 流中的字符编码
- 在jsp页面中,讲鼠标变成小手
- ArrayList.iterator()的一个小小问题
- 关于JAVA SWING 界面设计
- 关于启动Java程序的大问题
- java.util.Date java.sql.Date java.util.Calendar之间类型转换问题。在线等。
- 如何把一个class中的Object[][]传送到另一个class中去???
- 点击Jtable的HEADER进行排序时,如何获得点击的列的序号!急HELP
- "ture、false and null"到底是不是JAVA Keywords?
- 高分求解JAVA中解析HTML的正则表达式写法
- 什么是对象的引用
你这样相当于修改了model的值两次,可是实际上,应该是在修改model的值之前去判断,如果非法,根本就不允许向model插入。这个通常可以通过编辑器的stopCellEditing方法来判断,如果返回值为false则表示不允许结束编辑;为true则允许结束编辑。
即使在editor里面你觉得不方便,也应该在setValueAt方法里面屏蔽一下非法值,至少这个方法,你可以得到旧的value以及要修改的value。这两种方法你可以选择,但是要在modellistener里面去处理,就晚了,model已经变了,如果你没有对旧值的备份,是跟本取不到的。但是,基本上没有人会浪费空间做这个,如果数据量较大,浪费的空间也就太多了。
我的代码是,如果点击的是对话框的确定按钮则改变单元格的值,否则单元格中原来的值不改变。代码如下:
if(title.equals("drops") ){
DropItemDialog dialg = DropItemDialog.getInstance();
value = (String) tableModel.getValueAt(rowIndex, colIndex);
if(dialg.getCheckedFlag()){
//单击了确定按钮则将选中的数据写入表格
tableModel.setValueAt(dialg.getSelectedItem(), rowIndex, colIndex);
dialg.dispose();
}else{
//单击了取消按钮或者直接关闭对话框,则将单元格中原来的值写入
tableModel.setValueAt(value, rowIndex, colIndex);
dialg.dispose();
}
table.repaint();
}