两个值之间的Java JTable行排序器

Posted

技术标签:

【中文标题】两个值之间的Java JTable行排序器【英文标题】:Java JTable rowsorter between two values 【发布时间】:2016-02-17 11:16:38 【问题描述】:

我正在尝试在 JTable 中的两个值之间进行“实时搜索”。假设这是我的桌子:

我已经用这样的东西进行了正常搜索

    jTextField1.getDocument().addDocumentListener(new DocumentListener() 
        @Override
        public void insertUpdate(DocumentEvent e) 
            String search = jTextField1.getText();

            if (search.trim().length() == 0) 
                rowSorter.setRowFilter(null);                    
             else 
                rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + search));
            

        
        @Override
        public void removeUpdate(DocumentEvent e) 
            String search = jTextField1.getText();

            if (search.trim().length() == 0) 
                rowSorter.setRowFilter(null);
             else 
                rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + search));
            

        
        @Override
        public void changedUpdate(DocumentEvent e) 
            throw new UnsupportedOperationException("Not supported yet."); 
        
    ); `

我现在想做的是做这样的事情,但正如你所看到的,有两个值“从到”,并且只显示这些记录,它们介于最小值、最大值和等于它们之间。假设从150-300。但我不知道该怎么做,我尝试过结合 2 个过滤器,例如

List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
filters.add( RowFilter.numberFilter(ComparisonType.AFTER, Float.parseFloat(min)) );
filters.add( RowFilter.numberFilter(ComparisonType.BEFORE, Float.parseFloat(max)) );
RowFilter<Object, Object> rf = RowFilter.andFilter(filters);
rowSorter.setRowFilter(rf);

但这不起作用。有谁知道如何做到这一点?我开始放弃...啊哈我的表中的数据是对象,我使用的是默认表模型。正如你所看到的,我刚开始学习 java,很抱歉我的英语不好:) 干杯。

【问题讨论】:

【参考方案1】:
filters.add( RowFilter.numberFilter(ComparisonType.AFTER, Float.parseFloat(min)) );
filters.add( RowFilter.numberFilter(ComparisonType.BEFORE, Float.parseFloat(max)) );

创建RowFilter.numberFilter(...) 时,您需要指定要在表中的哪一列上进行比较。如果不指定索引,则默认为所有列。

【讨论】:

是的,我知道,但我认为它的过滤器构造错误。 @Sniego,发布您的SSCCE,使用您知道的信息证明问题所在,这样我们就不必猜测您可能会或可能不会做什么。 这就是重点,除了这个搜索功能我什么都没有。这个 rowfilter 只是我预测如何解决我的问题。但实际上我只是不知道如何根据 min-max 值进行排序。如果你真的想要我可以发布这个应用程序的代码,但只有搜索功能和表格。

以上是关于两个值之间的Java JTable行排序器的主要内容,如果未能解决你的问题,请参考以下文章

如何为 JTable 中的单元格着色? [复制]

尝试使用自定义渲染器为 JTable 的特定行着色,而不是我的所有行都着色

背景排序JTable后,特定值的颜色不会改变

Java JTable - 首先单击列以按降序排序

Java:如何在不使用 TransferHandler 的情况下拖动 JTable 行?

如何将两种类型的值添加到JTable行?