【问题标题】:Update TableView without refreshing the window?在不刷新窗口的情况下更新 TableView?
【发布时间】:2015-05-13 08:57:20
【问题描述】:

我有这个带有几个 TextField 和一个 TableView 的窗口。我制作了一个搜索引擎,每次我在 TextFields 中写入时,都会显示一个新的给定对象数组,这些对象适合我在 TextFields 中写入的内容。现在,我已经对其进行了测试,并且我知道搜索引擎可以正常工作。但是当我尝试更新 TableView 时问题就来了。我已经尝试过解决它,但我能想到的唯一解决方法是每次在其中一个 TextField 中键入内容时刷新整个窗口。但这显然不是一件好事。

所以我的问题是:你知道如何在不刷新整个窗口的情况下刷新 TableView 中的列表吗?或者还有什么我可以用来直观地显示例如“Person”对象,使它们可点击并保存指向给定对象的指针?

请提出您的任何意见,我很乐意尝试或讨论您的意见!

【问题讨论】:

  • 使用 fireTableCellUpdated(row, col);为了更新单个单元格的值,或者 fireTableRowsUpdated(int firstRow, int lastRow);一行或多行。
  • 我不确定这是不是我要找的。假设我显示了一个包含 100 万个 Person 对象的数组。然后我在一个 TextField 中键入其他内容,我的搜索方法返回一个包含一半一百万个对象的数组。有没有一种有效的方法来显示这个?出于某种原因 setItems(Observablelist ol);导致问题。
  • AbstractTableModel 默认是高效的。即使您的 ResultSet 中有几百万行,一次在屏幕上显示的行数也绝对不会超过 100 行。试一试。
  • 我明白了。我会试一试!
  • @CostisAivalis 这些是 Swing 表模型方法,而不是 JavaFX TableView 方法。

标签: javafx tableview


【解决方案1】:

找到问题了!

setItems();似乎调用了 object.equals();

我在 .equals(); 的 @Override 中犯了一个错误

@Override
public boolean equals(Object obj) {
    return this.birthNo.equals(((Person) obj).getBirthNo());
}

更正如下:

@Override
public boolean equals(Object obj) {
    return obj != null && this.birthNo.equals(((Person) obj).getBirthNo());
}

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 2017-03-24
    • 1970-01-01
    • 2021-07-11
    • 2023-03-31
    • 2022-01-21
    • 2011-06-15
    • 1970-01-01
    • 2015-01-13
    相关资源
    最近更新 更多