gpt4 book ai didi

java - 使用 beans 绑定(bind)搜索 jTable

转载 作者:行者123 更新时间:2023-11-30 04:08:59 26 4
gpt4 key购买 nike

我有一个 jTable,它使用 Beans Binding 由数据库中的数据填充。我想实现一个表格的搜索功能。我遇到了以下使用 beans 绑定(bind)实现此目的的教程:

https://weblogs.java.net/blog/pkeegan/archive/2008/06/using_beans_bin.html

我无法让它工作。当我运行我创建的示例应用程序时,我看到搜索文本字段中出现意外值,例如“javax.swing.table.TableRowSorter@16994fe8”。这实际上来自转换器类中的convertForward()方法,该方法将TableRowSorter对象转换为字符串。当我在文本字段中输入内容时没有任何反应。

我已将 jTable 的 autoCreateRowSorter 属性设置为 true。我没有使用自定义表模型,因为该表是通过使用默认表模型的 beans 绑定(bind)来填充的。

注意到转换器类的 getTable()、setTable() 或 ConvertReverse() 方法未被调用。我想知道我在这个过程中是否错过了什么。

下面给出的是我用来将搜索文本字段与 jTable 绑定(bind)的代码:

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();

非常感谢您在这方面的任何帮助。

最佳答案

碰巧我最近需要类似的东西,结果相当简单:假设你想要

  • 将输入文本字段的文本映射到正则表达式 rowFilter
  • 使用 beansbinding 在键入时过滤表格行

所以转换的方向是从字段(源)到表(目标),而你所需要的就是

  • 从 String 到 Rowfilter 的合适转换器,反向没有多大意义(至少对我来说是:-)
  • 从字段的 text 属性到表的 rowFilter 属性的绑定(bind)(假设是 JXTable,对于普通表,您需要一条通往排序器过滤器的路径)
  • 将转换器连接到绑定(bind)

类似于:

final JXTable table = createTable(surveys);
JTextField field = new JTextField(20);
BindingGroup context = new BindingGroup();
AutoBinding binding = Bindings.createAutoBinding(READ,
field, BeanProperty.create("text"),
// JXTable which has delegating
// api to set the rowFilter
table, BeanProperty.create("rowFilter"));
// plain table, use path the sorter's filer property
//table, BeanProperty.create("rowSorter.rowFilter"));
Converter<String, RowFilter> converter = new Converter<String, RowFilter>() {
@Override
public RowFilter convertForward(String value) {
if (value == null || value.trim().length() == 0) return null;
return RowFilters.regexFilter(value, 0);
}

@Override
public String convertReverse(RowFilter value) {
throw new UnsupportedOperationException("don't expect reverse conversion here");
}

};
binding.setConverter(converter);
context.addBinding(binding);
context.bind();

关于java - 使用 beans 绑定(bind)搜索 jTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089631/

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