简体   繁体   中英

How can I filter rows in a JTable?

I have a JTable with many strings in it. I have created a textbox for user entry, above the table. I want a row filter which can remove the rows having strings entered by the user in the text box. Please help me out for this.

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); } 

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);
}  

您可以使用JTable.setAutoCreateRowSorter ,它将使用JTable的默认行分类器/过滤器

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM