继上次JTable实现号码分布的博文之后,这次写一下关于JTable数据的更新、删除、插入吧。
同样的,本文将以abstractTableModel为例,其他数据导入方式可以参考。主界面如下:
数据从文件导入,首先是添加。添加的时候会弹出一个对话框,提示输入插入的相关信息,这里不做叙述。添加时,会判断期数对不对(即有无重复的期数),判断方式如下:
for(int i=0; i<histroyDataTableMode.getRowCount(); i++) {
if(histroyDataTableMode.getValueAt(i, 0).equals(stageValue)) {
JOptionPane.showMessageDialog(null, "期数不对:\n所插入的期数已经存在!");
validInput = false;
break;
}
}
使用getValueAt获取第一列的值,与输入的stageValue作比较。然后showDialog即可。判断正确后,即写入文件,写入文件部分,,,以后再写吧。现在不高兴写,太累了, 大中午的想睡觉 – -! 文件写完后更新table,更新table如下:
// 在表中显示
AnalyseDataInfo dataToInsert = new AnalyseDataInfo();
dataToInsert.SetStage(stageValue);
for(int i=0; i<6; i++) {
dataToInsert.SetRedBall(i, redBallVale[i]);
}
dataToInsert.SetBlueBall(blueBallValue);
histroyDataTableMode.add(dataToInsert);
其中add方法为:
public void add(AnalyseDataInfo data) {
int index = stageDatas.size();
stageDatas.add(data);
fireTableRowsInserted(index, index);
}
stageDatas为插入数据的一个全部变量链表,此处直接添加,然后fireTableRowsInserted即可。这是添加部分。
接下来是删除部分。删除部分大同小异,由于我是用AbstractTableModel,因此很简单的,在删除部分直接:
public void delete(int stage) {
for(int i=0; i<stageDatas.size(); i++) {
int stageInList = stageDatas.get(i).GetStage();
if(stage == stageInList) {
stageDatas.remove(i);
fireTableDataChanged();
break;
}
}
}
就大功告成。比较简单,嘿嘿。
最后便是更新数据了。更新数据也差不多,这里我提一下,在更新数据的过程中,一开始我直接使用的是AbstractTableModel的API:setValueAt更新,结果Table里面的数据死活不变,搞的我一开始是以为刷新不及时,然后尝遍各种刷新方法,什么repiant、updateUI、validate;也试过修改AbstractTableModel的各种fire,等等等等,各种蛋疼。结果到最后才发现原来是setValueAt这个API压根没起作用。气的我快疯了。setValueAt手册里描述如下:
setValueAt
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
- 由于提供了此空实现,因此,如果用户的数据模型是不可编辑的,则他们不必实现此方法。
哎,不靠谱啊不靠谱。后来尝试修改链表值才发现原来可以如此简单,也使我后面的添加操作,删除操作一气呵成,由此也发现AbstractTableModel的好处,嘿嘿。
总结,JTable只是一个显示内容的框体,正常幕后操作数据的,是实现的TableModel。
OK,本文到此结束。
今天的文章<java><JTable>使用AbstractTableModel实现更新、删除、插入数据分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31370.html