【问题标题】:How to Keep Track of row index when JTable has been sorted by the user?用户对 JTable 进行排序后,如何跟踪行索引?
【发布时间】:2010-11-11 06:17:59
【问题描述】:

我有一个第一行空白的 JTable。现在,当我通过单击该列基于该列对表格进行排序时,空白行位于底部。如果我在空白行中插入一些东西并进行排序,则相应地放置该行。即使已排序,我如何跟踪其行索引。我需要访问该行,但如果用户进行排序,那么我会丢失行索引,因为它不再是第一行。

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    假设您使用的是 Java 6 中添加的 TableRowSorter 东西,我认为您需要查看的是 RowSorter 类中的方法 convertRowIndexToModelconvertRowIndexToView。你会做类似的事情

    table.getRowSorter().convertRowIndexToView(0)

    找出哪个可见行索引实际上是模型中的行索引 0。

    编辑:正如 Tulskiy 在 cmets 中指出的那样,如果没有为表分配行排序器,这可能会导致 NullPointerException。最好直接在 JTable 上使用这些方法,例如table.convertRowIndexToView(0)

    【讨论】:

    • 看起来 tulskiy 指出你可以只调用 table.convertRowIndexToView,它只会将调用转发到 rowSorter,但更方便。我对这些 API 不太熟悉——我习惯于在 Java 6 之前编写自定义排序... yech :p
    • 如果没有定义排序器,您的代码可能会给出 NPE...而且我在内置排序和自定义表模型方面遇到了太多麻烦,无法在将来避免它。
    【解决方案2】:

    JTable.convertRowIndexToView() 将根据模型中的索引返回视图中行的索引。 JTable.convertRowIndexToModel() 会做相反的事情。

    【讨论】:

    • @Krishna Kumar:没问题。我刚刚意识到我对方法的描述错误:)
    • 没关系...我刚刚做了 table.getRowSorter().convertRowIndexToView(0) 并且我的目的解决了...:)
    【解决方案3】:

    解决方案 1

    使用jTable1.convertRowIndexToModel(jTable1.getSelectedRow()) 时会出现一些问题,如果您根据日期或时间对值进行排序,则会从convertRowIndexToView(0) 返回不正确的值,因此请使用convertRowIndexToModel(0)

    解决方案 2

    这将在排序后从新模型中检索。

    jTable1.getValueAt(jTable1.getSelectedRow(), 0);
    

    这将根据原始索引检索值,即使已排序。

    ((DefaultTableModel)jTable1.getModel()).getValuAt(jTable1.getSelectedRow(), 0);
    

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      相关资源
      最近更新 更多