gpt4 book ai didi

java - 刷新与 jTable 绑定(bind)的 JPA 结果列表

转载 作者:行者123 更新时间:2023-11-29 08:18:08 24 4
gpt4 key购买 nike

在 Netbeans 中,我创建了一个 JTable 并将其值绑定(bind)到一个 JPA 结果集。这很好用。查询包含我在“查询结果”组件的 pre-create 框中设置的参数。所以就在 Netbeans 创建查询结果之前,我这样写:

myQuery.setParameter("year", "1997");

这很好用。现在,我有一个事件处理程序,它应该更改参数并在表中显示新值。所以我这样做:

myQuery.setParameter("year", "2005");
myResultList.clear();
myResultList.addAll(myQuery.getResultList());
jTable1.updateUI();

这行得通,但我感觉不对。 注意:结果集绑定(bind)到表。所以我希望有这样的东西:

myQuery.setParameter("year", "2005");
myResultList.refresh();

有这样的吗?

最佳答案

我终于明白了...

问题的根源在于 JTableBinding 类。以下是 API 文档的重要摘录:

If the List is an instance of ObservableList, then changes to the List contents (such as adding, removing or replacing an object) are also reflected in the JTable. Important: Changing the contents of a non-observable List while it is participating in a JTableBinding is unsupported, resulting in undefined behavior and possible exceptions.

事实上,在列表内容不是可观察列表时更改列表内容在生成的 UI 中会出现奇怪的行为。例如,如果您的初始查询返回 1000 行,而更新后列表仅包含 100 行,则绑定(bind)的 JTable 仍然允许您尝试滚动浏览结果。 UI 会“挂起”一小会儿。

事实上,当在 Netbeans 中使用 JPA 时,您可以使用调色板中的适当组件,然后您可以轻松解决此问题。 QueryResult“小部件”有一个标记为“可观察”的复选框。检查这个,你就完成了。现在对结果的所有更改都将自动反射(reflect)在 JTable 中。所以你可以简单地做:

myQuery.setParameter("year", "2005");
myResultList.clear();
myResultList.addAll(myQuery.getResultList());

不做任何其他事情。

关于java - 刷新与 jTable 绑定(bind)的 JPA 结果列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com