如何修改JTable的显示内容?基于ListSelectionListener切换表格数据实现方案
JTable动态切换绑定数据方案
问题背景
我有一个名为tableOne的JTable,最初通过如下方式初始化填充:
JTable tableOne = new JTable(contents, header); // contents 为预先定义的String[][]二维数组,header为预先定义的String[]表头数组
另有一个存储CustomObject对象的列表,每个对象都包含名为customObjectContents的String[][]属性,该二维数组已完成数据填充。
需求为通过ListSelectionListener监听选中事件,将tableOne的展示数据切换为选中对象对应的customObjectContents内容。
开发过程中遇到的冲突点:无法在Listener中操作tableOne变量,原因是匿名内部类访问的外部局部变量需要为final类型;但如果将tableOne声明为final,又误以为无法修改其内部展示内容,逻辑看似矛盾。
最终实现方案
放弃原有直接传入数据的表格初始化方式,改为通过表格模型实现动态数据更新:
替换初始化代码
原初始化逻辑:
JTable tableOne = new JTable(contents, header);
替换为基于DefaultTableModel的初始化方式:
DefaultTableModel model = new DefaultTableModel(); JTable tableOne = new JTable(model);
动态更新数据逻辑
不需要直接操作表格实例,只需在Listener中修改model即可触发表格内容自动更新。切换数据的代码如下:
model.setDataVector(customObject.contentsArray, header);
其中contentsArray为自定义对象中存储的String[][]数据数组,header为全局公用的表头String[]数组。
该方案可完美解决场景需求,可供遇到同类问题的开发者参考。
内容的提问来源于stack exchange,提问作者GalliadII
相关产品推荐
相关产品推荐

