我有一个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
答案 0 :(得分:1)
你能发布一份可验证的你的代码吗?因为我尝试使用以下代码并且模型更改没有任何问题。
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultTableModel model = new DefaultTableModel(
new Object[][] { { "some", "text" }, { "any", "text" },
{ "even", "more" }, { "text", "strings" },
{ "and", "other" }, { "text", "values" } },
new Object[] { "Column 1", "Column 2" });
String[] columnNames= {null};
DefaultTableModel model1 = new DefaultTableModel(null,columnNames);
model1.setRowCount(0);
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
Thread.sleep(5000);
table.setModel(model1);
}
答案 1 :(得分:0)
使用自定义RowSorter(或任何RowSorter)时,必须注意确保分拣机和表的模型始终匹配。正如setRowSorter
Javadoc中指定的那样:
如果RowSorter的基础模型与此JTable的基础模型不同,将导致未定义的行为。
JTable的setModel
方法不会更新行分类器,除非您使用默认的自动分类器(通过设置autoCreateRowSorter
标志)。
因此,你应该
setAutoCreateRowSorter(true)
而不是自定义排序器来使用默认行排序器,