Java 如何过滤 JTable 中的行?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1107911/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 23:51:11  来源:igfitidea点击:

How can I filter rows in a JTable?

javaswingjtablerowfilter

提问by

i have a JTable having many strings in that.i have created a textbox for user entry, above the table. i want a row filter which can remove the rows having strings enterd by the user in the text box. please help me out for this.

我有一个 JTable,里面有很多字符串。我在表格上方为用户输入创建了一个文本框。我想要一个行过滤器,它可以删除具有用户在文本框中输入的字符串的行。请帮我解决这个问题。

回答by Victor

from here:
sorting and filtering

从这里:
排序和过滤

In the following example code, you explicitly create a sorter object so you can later use it to specify a filter:

MyTableModel model = new MyTableModel();
sorter = new TableRowSorter<MyTableModel>(model);
table = new JTable(model);
table.setRowSorter(sorter);

Then you filter based on the current value of a text field:

private void newFilter() {
    RowFilter<MyTableModel, Object> rf = null;
    //If current expression doesn't parse, don't update.
    try {
        rf = RowFilter.regexFilter(filterText.getText(),0);
    } catch (java.util.regex.PatternSyntaxException e) {
        return;
    }
    sorter.setRowFilter(rf);
}

在以下示例代码中,您显式创建了一个排序器对象,以便您以后可以使用它来指定过滤器:

MyTableModel model = new MyTableModel();
sorter = new TableRowSorter<MyTableModel>(model);
table = new JTable(model);
table.setRowSorter(sorter);

然后根据文本字段的当前值进行过滤:

private void newFilter() {
    RowFilter<MyTableModel, Object> rf = null;
    //If current expression doesn't parse, don't update.
    try {
        rf = RowFilter.regexFilter(filterText.getText(),0);
    } catch (java.util.regex.PatternSyntaxException e) {
        return;
    }
    sorter.setRowFilter(rf);
}

回答by oxbow_lakes

You can use JTable.setAutoCreateRowSorterwhich will use the default row sorter/filter of the JTable

您可以使用JTable.setAutoCreateRowSorterwhich 将使用默认的行排序器/过滤器JTable

回答by boutta

To pick up the comment from kd304, you could use GlazedLists. There you'll use a FilterList as the input for your JTable, and the FilterList will take care of the rest.

要从 kd304 中获取评论,您可以使用GlazedLists。在那里,您将使用 FilterList 作为 JTable 的输入,而 FilterList 将负责其余的工作。

回答by Adrian

This few line solution seems to work:

这几行解决方案似乎有效:

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) 
{                                            
    TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(((DefaultTableModel) jTable1.getModel())); 
    sorter.setRowFilter(RowFilter.regexFilter(jTextField1.getText()));

    jTable1.setRowSorter(sorter);
}