当前位置: 首页 > 知识库问答 >
问题:

使用beans绑定搜索jTable

阙辰龙
2023-03-14

我有一个jTable,它由使用bean绑定的数据库中的数据填充。我想为表实现一个搜索函数。我遇到了以下教程,它使用bean绑定实现了这一点:

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

我无法使它工作。当我运行我创建的示例应用程序时,我看到搜索文本字段上出现了一个意外的值,如“javax.swing.table.TableRowSorter@16994FE8”。这实际上来自converter类中的convertForward()方法,它将TableRowSorter对象转换为字符串。当我在文本字段上键入内容时,什么也不会发生。

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

注意到未调用converter类的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();

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

共有1个答案

爱花蜂
2023-03-14

恰巧我最近也需要类似的东西,结果很简单:假设你想要

  • 将键入到textfield中的文本映射到regex RowFilter
  • 使用beansbinding在键入时筛选表行

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

  • 从String到Rowfilter的合适转换器,相反没有多大意义(对我来说,至少是:-)
  • 从字段的text属性到表的rowFilter属性的绑定(假设是JXTable,对于普通表,您需要一个到排序器筛选器的路径)
  • 将转换器附加到绑定

类似于:

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();
 类似资料:
  • 问题内容: 我有一个应用程序,其中将json中的数据显示到listview中,现在想在listview上应用搜索功能。但是每当我在editbox中输入内容时,错误数组索引就会超出界限。请帮助我进行排序。 HomeActivity 适配器类 问题答案: 尝试这种方式,希望这将帮助您解决问题。 Home Fragment 转接器类别

  • 问题内容: 我使用JavaFX NumberBindings来计算某些值。最初,一切正常。但是,经过相当短的时间后,绑定将停止工作。我也没有收到例外。 我已经尝试了几种绑定以及高级和低级方法。即使计算本身(被覆盖时)也只是停止并且不再被调用。我还更新到了最新的JDK(1.8.0_05),并重新构建/重新启动了所有内容。 以下最小工作示例说明了该问题。它应该将System.out.println主窗

  • 如何告诉Elasticsearch在按术语搜索时排除某个字段? 当一个普通用户搜索摩托车时,什么都不应该返回,但如果他们搜索史密斯,这两个都应该返回。 有能力搜索认证字段的用户如果搜索摩托车将返回标记,如果搜索史密斯将返回标记。

  • 我一直在尝试使用Java的二分搜索方法在单词数组(一个词典)中搜索一个特定的字符串,然后确定该字符串是单词、前缀还是不是单词。如果返回的索引大于或等于零,则字符串为单词。如果返回的索引小于零,那么我必须确定它不是一个单词,还是一个前缀。

  • 问题内容: 我在某处读到了-链接逃脱了我-Beans Binding不会成为Java 7的一部分。有人知道它将取代它吗? 此外,在当前的Java版本中,是否有任何替代bean绑定的方法? 问题答案: 我建议将JGoodies Binding用于字段,将Glazed List 用于集合。

  • 问题内容: 我在获取nHibernate.Search来创建索引时遇到了麻烦。 如果我使用nHibernate.dll和nHibernate.Search.dll的1.2.1.4,则可以正确创建索引,并且可以使用Luke(Lucene实用程序)对其进行检查。创建了一个segments文件以及一个Fragments文件等 但是,当我使用nHibernate.dll和nHibernate.Search