gpt4 book ai didi

java - 如何从元素绑定(bind)到列表的 JTable 检索 "${selectedElement}"

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:33 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个 JTable 和一个列表。

  • 列表:该列表是使用 JPA 查询填充的。用户可以通过更改 GUI 中的属性来重新执行查询。假设查询有一个命名参数“year”,并且用户可以更改它。然后发生以下情况(通过省略异常处理来简化):

    myList.clear()
    mylist.addAll( myQuery.setParameter("year", 2010) )

    随着列表的更改,绑定(bind)会触发所需的处理程序,并且表格现在会反射(reflect)新的数据集。

  • JTable:

    JTable 的内容来自 BeansBinding(更准确地说是 JTableBinding)。绑定(bind)源是前面提到的列表。

该查询仅针对密集型任务执行。就像对巨大的数据集应用粗略过滤器一样。前面的年份示例就是一个很好的例子。这将始终向客户端返回可管理的数据 block 。现在,为了获得响应更快的用户体验,JTable 本身中出现了更细粒度的过滤器。这避免了不必要的数据库往返。

接下来,假设以下场景:用户在表中选择一行并单击删除按钮。如果表被过滤,则所需的代码很简单(同样,为了代码简单,没有错误检查、并发锁定和异常处理程序):

MyObject = myList.get( myTable.getSelectedRow() );
myEntityManager.getTransaction().begin()
myEntityManager.remove( myObject )
myEntityManager.getTransaction().commit()

但是:如果在客户端对表格进行过滤,则表格将不会反射(reflect)列表内的数据。因此 getSelectedRow() 不会返回映射到列表中相同条目的索引(我还没有测试过这一点,但我相信我的假设是正确的?)

所以...我的问题:

如何最好地解决这个问题?

可能的解决方案?

我已经通过以下方法解决了当前的问题:

  • 我创建了一个名为 selectedTableElement 的新 Bean,其中包含一个保存表中当前选定元素的成员。
  • 接下来,我使用

    创建了一个新绑定(bind)(源:我的表,目标:我的“selectedElement”bean)
    binding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, myTable, ELProperty.create("${selectedElement}"), selectedTableElement, BeanProperty.create("selectedElement"), "selectedElementBinding");

该解决方案通过使用 Beans Binding 跟踪表中选定的元素,有效地解决了该问题。

但这真的有必要吗?我觉得很笨重。一个全新的类只封装选定的元素?是否没有其他更直接的方法来检索 JTable"${selectedElement}" 属性?

最佳答案

我会尽力回答您的两个问题。
关于第一个问题(过滤后的选定索引与真实列表索引):

  • 我假设您使用 BeansBinding 绑定(bind)表,通过 createJTableBinding 。因此,可以通过使用 swing TableRowSorter 和 RowFilter 来应用客户端过滤。我对吗 ?如果是这样,您可以使用该方法
    int row = myTable.convertRowIndexToModel(myTable.getSelectedRow());
    将过滤 View 中选定的行转换为模型中实际选定的行。

对于第二个问题(保存表中所选项目的bean)

  • 您还可以使用 this 创建绑定(bind)作为源/目标对象,并创建属性 selectedElement在包含该表的类中。因此,您不需要再上一个类。代码为:createAutoBinding(UpdateStrategy.READ_WRITE, myTable,<br/>
    ELProperty.create("${selectedElement}"), this, BeanProperty.create("selectedElement"), "selectedElementBinding");

    (另请注意,READ_WRITE 绑定(bind)并未真正使用,因为 beans 绑定(bind)不支持从绑定(bind)属性更改所选元素)

关于java - 如何从元素绑定(bind)到列表的 JTable 检索 "${selectedElement}",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194360/

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