根据文本字段过滤jTable

时间:2014-07-18 09:21:05

标签: java swing sorting filter jtable

我正在尝试按文本字段中的值过滤我的表,但每当我向文本字段写任何内容时,表中的所有行都会被过滤(因此没有显示行),即使表中包含该字或数字。

public JTextField filterT = new JTextField();
private TableRowSorter<TableModel> sorter;

        sorter = new TableRowSorter<TableModel>(tm); //tm is my table model
        filterT.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                String text = filterT.getText();
                filter(text);
            }
            @Override
            public void removeUpdate(DocumentEvent e) 
            { 
                String text = filterT.getText();
                filter(text);
            }
            @Override
            public void changedUpdate(DocumentEvent e) {
                String text = filterT.getText();
                filter(text);
            }
          });

private void filter(String text)
{
    RowFilter<TableModel, Object> rf = null;
    try {
        rf = RowFilter.regexFilter(text, 0);
    } catch (java.util.regex.PatternSyntaxException ee) {
        return;
    }
    sorter.setRowFilter(rf);
    jTable1.setRowSorter(sorter);
}

有什么问题?

2 个答案:

答案 0 :(得分:0)

阅读Sorting and Filtering上的Swing教程中有关执行此操作的working example的部分。

答案 1 :(得分:0)

我认为您可以尝试

DefaultTableModel Model = (DefaultTableModel)jTableName.getModel(); 
TableRowSorter<DefaultTableModel> tr = new TableRowSorter<DefaultTableModel>(Model);
jTableName.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter(JtextfieldName.getText().trim()));