实现JTable的动态更新
来源:互联网 发布:东安格利亚大学知乎 编辑:程序博客网 时间:2024/06/10 04:56
最近有个项目需要用到JTable,于是我去查了JTable的API,知道了JTable的以下构造方法JTable(int numRows, int numColumns);这是指定行列的JTable,没有表头,舍弃,JTable(Object[][] rowData, Object[] columnNames);这样的JTable不够灵活,缺少很多方法,舍弃。
我最开始用的是JTable(TableModel dm);在构造一个DefaultTableModel,
刚开始用的是DefaultTableModel(Object[][] data, Object[] columnNames);然后主要依靠的是DefaultTableModel的setDataVector方法。我的思路是new 一个100行的二维数组,然后放到JScrollPane上,在数据修改以后,用getValueAt获取每一个单元格的数据,再写入文件,然后再从文件读一次,再用setDataVector方法去更新JTable上的数据。这样就基本实现了JTable数据的动态更新。
但是这样也有缺点,首先是界面不美观,如果数据量少的话,界面上就会有很多空白行,这些空白行都是可以编辑的,考虑到用户可能这这些单元格上随便编辑,给后续的获取数据造成影响。其次,因为二维数组是固定长度的,这会导致数据存储有一个极限,这无疑是很大的副作用。
后来我注意到DefaultTableModel的addRow方法和removeRow方法,在经过试验以后,我发现这两个方法都是实时更新的,即一使用这个方法之后,JTable上的数据都会更新,这样我就有了一个想法——通过文件的反复读写实现JTable的行数可变和无极限。
// mark值是用于标记是否是第一次读取文件 public static void ReadFile(boolean mark) { try { if (!file.exists()) { file.createNewFile(); } v.clear(); String s1[][] = new String[1][7]; for (int i = 0; i < s1.length; i++) { s1[0][i] = new String(); }// 如果是第一次读取文件,则new DefaultTableModel,其中s1为一个无意义的字符串数组// 一维长度,即JTable上的行,只有1,names是一个包含各列名称的字符串数组 if (mark) { d = new DefaultTableModel(s1, names); } else {// 如果不是第一次读取文件,那么JTable上一定以有数据,// 这里是将JTable上以显示的每一行都删除// 必须从最后一行往前移除,否则无法全部移除,因为每一次移除之后,各行的行索引都会上升一位,// 这导致如果是从第0行开始移除的话,就无法全部移除 for (int i = bd.getRowCount() - 1; i >= 0; i--) { bd.removeRow(i); }// 这里是读取文件,将读取到的数据放到对应的位置,我这里是读写的火车车次信息 BufferedReader br = new BufferedReader(new FileReader(file)); while (true) { String carnum = br.readLine(); if (carnum == null) break; String startplace = br.readLine(); String endplace = br.readLine(); String starttime = br.readLine(); String endtime = br.readLine(); double price = Double.parseDouble(br.readLine()); int restnumber = Integer.parseInt(br.readLine()); String Temp1[] = { carnum, startplace, endplace, starttime, endtime, String.valueOf(price), String.valueOf(restnumber) }; Tickets temp = new Tickets(carnum, startplace, endplace, starttime, endtime, price, restnumber);// v 是一个vector集合,这是实现无限读取的基础 v.add(temp);// 这里是将读到的每一组数据加入到JTable上 d.addRow(Temp1); } br.close(); // 第一次读取需要移除第0行的空行,就是上面的那个s1造成的空行 if (mark) { d.removeRow(0); } } catch (Exception e) { e.printStackTrace(); } }
最后的效果是
可以很明显的看出,下面没有可编辑的空行
这样一个可以动态更新的JTable就制作好了
- 实现JTable的动态更新
- JTable数据的动态更新
- JTable的使用示例,实现动态更新数据
- JTable表格实现动态更新的两种方式
- Java JTable 实现数据动态更新
- JTable更新内容的方法
- 动态取得Jtable的tooltip
- JTable实现行号-动态增删【转】
- DefaultTableModel及JTable更新数据的问题
- JTable列拷贝的实现
- 带CheckBox的JTable实现
- <java><JTable>使用AbstractTableModel实现更新、删除、插入数据
- 使用Swing timer实现Jtable数据定时更新
- 动态更新图形界面的实现一例
- 实现动态更新ProgressBar的水平进度条
- JTable更新数据
- JTable数据实时更新
- JTable实现数据库的操作完整版
- android studio创建第一个安卓程序加载html5页面(二)
- 结构体使用分析
- 多线程下载之断点续传采用随机文件读取流,HttpConnection实现
- 转:解决 unresolved external symbol 无法解析
- 【SPOJ-ARRAYSUB】subarrays【单调队列】
- 实现JTable的动态更新
- 读uCOSIII源码笔记
- java基础 内部类使用总结
- C语言文件操作函数大全
- Apache shiro 笔记整理之编程式授权
- Gartner诠释什么是真正的BI分析平台
- Leetcode 142
- Openstack镜像和密码
- 模拟登陆