jTable行数VS模型行数

我有一个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的底层模型不同,将导致未定义的行为。

JTable的setModel方法不会更新行分类器,除非您使用默认的自动分类器(通过设置autoCreateRowSorter标志)。

因此,你应该

  • 保持对您的分拣机的参考并更新其模型
    要么
  • 通过在表上设置setAutoCreateRowSorter(true)而不是自定义排序器来使用默认行排序器,

你能发布一个可validation的你的代码吗? 因为我尝试使用以下代码并且模型更改没有任何问题。

  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); }