使用JTextField的JTable过滤不起作用

Mic*_*ler 2 java swing filtering jtable

我有一个JTable(DefaultTableModel)和一个JTextField.我想用我放入文本字​​段的正则表达式过滤JTable.当我启动程序时,会显示所有条目,但是当我在文本字段中输入文本时,即使它应该在一行中找到文本,也不会显示任何行.

private void createFilter() {
    _sorter = new TableRowSorter<DefaultTableModel>(new DefaultTableModel());

    JPanel filterPanel = new JPanel();
    filterPanel.setLayout(new BorderLayout());

    JLabel filterLabel = new JLabel("Filter:");
    filterPanel.add(filterLabel, BorderLayout.WEST);

    _inputField = new JTextField();
    _inputField.setColumns(40);
    filterPanel.add(_inputField, BorderLayout.CENTER);
    _inputField.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent de) {
            newFilter();
        }

        public void removeUpdate(DocumentEvent de) {
            newFilter();
        }

        public void changedUpdate(DocumentEvent de) {
            newFilter();
        }
    });

    JButton clearButton = new JButton("X");
    clearButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            _inputField.setText("");
        }
    });
    filterPanel.add(clearButton, BorderLayout.EAST);

    _mainFrame.add(filterPanel, BorderLayout.SOUTH);
}

private void newFilter() {
    RowFilter<DefaultTableModel, Object> rowFilter = null;
    try {
        rowFilter = RowFilter.regexFilter(_inputField.getText());
    }
    catch(java.util.regex.PatternSyntaxException ex) {
        return;
    }
    _sorter.setRowFilter(rowFilter);
    _table.setRowSorter(_sorter);
}
Run Code Online (Sandbox Code Playgroud)

我的调试器告诉我,rowFilter已初始化,因此不能因为RegEx错误.每次按键时都会调用newFilter().

提前致谢.如果需要,我很乐意提供更多信息.

真诚的,迈克尔

JB *_*zet 5

似乎JTable和TableRowSorter都有不同的表模型.应使用JTable的表模型构造TableRowSorter.