【问题标题】:How to select the last inserted row in a JTable?如何选择 JTable 中最后插入的行?
【发布时间】:2013-01-04 19:23:42
【问题描述】:

我有一个包含两列的 JTable 和一个表模型,该模型使用一个与哈希映射一起工作的类。此地图的元素是表格行。

每次我添加一个新元素时,我都需要选择该元素,而不管任何排序。现在,我尝试使用以下方法:

int lastRow = table.convertRowIndexToView(tableModel.getRowCount() - 1);
table.setRowSelectionInterval(lastRow, lastRow);

问题是,这仅在我以排序方式添加数据时才有效(例如“A”、“B”、“C”,甚至因为“D”位于 A 之前)一旦添加)。谁能告诉我如何解决这个问题?

【问题讨论】:

  • 如何创建一个扩展 JTable 的类来存储最后插入的元素,或者保留插入顺序的列表?
  • Robin 是对的,不要使用 HashMap,更喜欢 ArrayList 作为数据源

标签: java swing jtable


【解决方案1】:

问题很可能出在您的TableModel 中,因为您发布的代码很好。您提到您使用HashMap 来存储TableModel 的数据。 HashMap 的问题在于它没有任何排序。向其中添加元素可能会改变您在地图中获取元素的顺序。

最好使用尊重顺序的数据结构。

【讨论】:

  • 是的,我意识到 HashMap 是问题所在。我通过在添加新元素后遍历我的表来解决这个问题,在我进行时比较键并在现场打破键等于表中的键。那是我需要选择的行,然后我简单地调用了上面的行。
  • @NikolaLuburic 听起来您的模型实现可能无效:插入不应更改行的顺序。如果插入确实更改了现有行的顺序,则模型必须触发 dataChanged (这将丢失任何选择并造成您遇到的问题:-)。
【解决方案2】:

最好使用prepareRendered for hightlighting max row index from XxxTableModel

JTable could be Sorted and Filtered 也是如此,那么最后添加的行在JTables 视图中不可见

取决于ListSelectionMode,但默认情况下你可以这样做

table.setRowSelectionInterval(lastRow, lastRow);
table.setColumnSelectionInterval(columnMinIndex, columnMaxIndex);

为了获得更好的帮助,请尽快发布 SSCCE,简短、可运行、可编译,大约是 JFrameJTable in JScrollPane 和从 swing.Timer 解雇的新 addRow

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多