【发布时间】:2013-12-04 01:45:26
【问题描述】:
我有一个 jTable,它由使用 Beans Binding 的数据库中的数据填充。我想为表实现一个搜索功能。我遇到了以下教程,它使用 bean 绑定实现了这一点:
https://weblogs.java.net/blog/pkeegan/archive/2008/06/using_beans_bin.html
我无法让它工作。当我运行我创建的示例应用程序时,我看到一个意外的值,例如“javax.swing.table.TableRowSorter@16994fe8”出现在搜索文本字段中。这实际上来自转换器类中的 convertForward() 方法,该方法将 TableRowSorter 对象转换为字符串。当我在文本字段中输入内容时,什么也没有发生。
我已将 jTable 的 autoCreateRowSorter 属性设置为 true。我没有使用自定义表模型,因为该表是使用默认表模型的 bean 绑定填充的。
请注意,转换器类的 getTable()、setTable() 或 convertReverse() 方法不会被调用。我想知道我是否在此过程中遗漏了什么。
下面是我用来将搜索文本字段与 jTable 绑定的代码:
BindingGroup bindingGroup = new BindingGroup();
RowSorterToStringConverter bindingConverter = new RowSorterToStringConverter();
Binding searchBinding = Bindings.createAutoBinding(
UpdateStrategy.READ_WRITE,
employeeTable,
ELProperty.create("${rowSorter}"),
txtSearch,
BeanProperty.create("text"));
searchBinding.setConverter(bindingConverter);
bindingGroup.addBinding(searchBinding);
bindingGroup.bind();
非常感谢这方面的任何帮助。
【问题讨论】:
-
IMO,重置表格的 rowSorter 是一个相当疯狂的想法(如博客中所做的那样) - 你最好绑定到 rowSorter 的 filter 属性(但从未尝试过)。可能是 autocreateRowSorter 与转换器中的手动设置发生冲突(疯狂猜测 :-) 无论如何,为了进一步的帮助,您可以考虑显示 SSCCE,以便我们可以轻松地重现问题。
标签: java swing jtable beans-binding