Как я могу отфильтровать строки в JTable? - PullRequest
4 голосов
/ 10 июля 2009

У меня есть JTable, в котором много строк. Я создал текстовое поле для ввода пользователя над таблицей. я хочу фильтр строк, который может удалить строки, в которые пользователь вводит строки в текстовом поле. пожалуйста, помогите мне в этом.

Ответы [ 4 ]

8 голосов
/ 10 июля 2009

отсюда:
сортировка и фильтрация

В следующем примере кода вы явно создать объект сортировщика так позже вы можете использовать его, чтобы указать Фильтр:

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);
}
5 голосов
/ 23 июня 2016

Это решение с несколькими строками работает:

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);
}  
2 голосов
/ 10 июля 2009

Вы можете использовать JTable.setAutoCreateRowSorter, который будет использовать сортировщик строк по умолчанию / фильтр JTable

1 голос
/ 10 июля 2009

Чтобы получить комментарий от kd304, вы можете использовать GlazedLists . Там вы будете использовать FilterList в качестве входных данных для JTable, а FilterList позаботится обо всем остальном.

...