繁体   English   中英

Java Swing切换按钮过滤JTable行

[英]Java swing toggle button to filter jtable rows

我有一个JTable ,它包含一个自定义AbstractTableModel ,当调用getValueAt时它返回一个对象。 当然,我有一个自定义的TableCellRenderer ,它能够从对象中获取/构造文本,以便可以显示它。

但是现在我想写一个过滤器。 过滤器将是一个简单的切换按钮。 当它打开时,我希望应用过滤器;当它关闭时,我希望除去过滤器。

由于这个原因,我有两个问题。

首先,我绝对不知道当必须按对象而不是按原语进行过滤时,如何编写过滤器。

其次,我不知道如何将所述过滤器附加到切换按钮以能够打开和关闭它。

如果这是一个迟钝的问题,很抱歉,但是http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting是我看到的最没用的文档,因为没有进行深入的解释。

感谢任何人的帮助。

编辑:该对象包含多个字段,但是我对两个过滤器切换特别感兴趣。 当我说isSuper ,一个返回boolean值,而当我调用getName时,第二个返回string 如果打开了第一个切换,则它应显示在isSuper上返回true的所有条目,而第二个切换应显示当我调用getName时name包含两个单词(包含空格)的所有条目。

首先,我绝对不知道当必须按对象而不是按原语进行过滤时,如何编写过滤器。

您阅读过RowFilter API吗? 它显示了如何基于自定义对象创建自定义过滤器的示例。

其次,我不知道如何将所述过滤器附加到切换按钮以能够打开和关闭它。

您是否阅读了教程并尝试运行演示? 每次用户更改文本字段中的文本时,本教程将使用DocumentFilter动态更改过滤器。 因此,本教程向您展示了如何根据用户输入动态更改过滤器。 您可以修改代码以在每次按下切换按钮时更改过滤器。

它包含一个自定义的AbstractTableModel,当调用getValueAt时返回该对象。 当然,我有一个自定义的TableCellRenderer,它能够从对象中获取/构造文本,以便可以显示它。

与我的答案无关,但我不太理解那句话。 您是说模型中的每个单元格返回一个不同的对象,还是每个单元格都返回相同的对象,但是您只是为column1,column2,column3等显示了对象的不同属性? 无论哪种方式,听起来都像是一个怪异的设计。 我们可能会提出更好的建议。 发布说明问题的SSCCE。

老实说, JavaDocs的拼写很好。

有了这么少的信息,您最好的概述就是...

TableRowSorter<TableModel> trs = new TableRowSorter<TableModel>();
table.setRowSorter(trs);

// Create the row filder...
trs.setRowFilter(new RowFilter<TableModel, Integer>() {

    @Override
    public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {
        boolean include = false;
        // Returns the value for the specific column...
        CustomObject value = (CustomObject)entry.getValue(filterColumn);
        if (filterBySuper) {
            include = value.isSuper();
        } else {
            include = value.getName().startsWith(fistPart) && value.getName().endWith(lastPart);
        }
        return include;
    }
});

当您想更新过滤器时,只需调用...

trs.sort();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM