两个值之间的Java JTable roworter

时间:2015-11-16 11:13:05

标签: java regex jtable rowfilter rowsorter

我正在尝试在JTable中的两个值之间进行“实时搜索”。让我们说这是我的表:

table

我用这样的东西做了正常搜索

    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."); 
        }
    }); `

我现在想要的是做这样的事情但是你可以看到两个值'from-to'并且只显示这些记录,它们在min,max和等于它们之间。让我们说从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 个答案:

答案 0 :(得分:0)

filters.add( RowFilter.numberFilter(ComparisonType.AFTER, Float.parseFloat(min)) );
filters.add( RowFilter.numberFilter(ComparisonType.BEFORE, Float.parseFloat(max)) );

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