我有一个jTable
从数据库查询中加载数据
此加载产生32个结果,因此TableModel
中有32行
使用myTable.getRowCount()
我可以正确获得32
然后我创建一个新的空模型并将其加载到表中
之后,如果我拨打myTable.getRowCount()
我仍然得到32
但是,如果我调用myModel.getRowCount(),我正确地得到0!
如果我的表正在使用模型,为什么table.getRowCount()和model.getRowCount()之间应该有区别?
...
System.out.println(myTable.getRowCount()); // 32
String[] columnNames= {null};
DefaultTableModel emptyModel= new DefaultTableModel(null, columnNames);
emptyModel.setRowCount(0);
myTable.setModel(emptyModel);
System.out.println(myTable.getRowCount()); // still 32, expecting 0
System.out.println(emptyModel.getRowCount()); // 0 as expected
最佳答案
使用自定义RowSorter(或与此相关的任何RowSorter)时,必须注意确保分类器和表格的模型始终匹配。如setRowSorter
Javadoc中所指定:
如果RowSorter的基础模型与此JTable的基础模型不同,则将导致未定义的行为。
除非您使用默认的自动排序器(通过设置setModel
标志),否则JTable的autoCreateRowSorter
方法不会更新行排序器。
因此,您应该
保留对您的分类器的参考并更新其模型
要么
使用默认的行排序器,方法是在表上设置setAutoCreateRowSorter(true)
而不是自定义,