У меня есть JTable, в котором много строк. Я создал текстовое поле для ввода пользователя над таблицей. я хочу фильтр строк, который может удалить строки, в которые пользователь вводит строки в текстовом поле. пожалуйста, помогите мне в этом.
отсюда: сортировка и фильтрация
В следующем примере кода вы явно создать объект сортировщика так позже вы можете использовать его, чтобы указать Фильтр: 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); }
В следующем примере кода вы явно создать объект сортировщика так позже вы можете использовать его, чтобы указать Фильтр:
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); }
Это решение с несколькими строками работает:
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
JTable.setAutoCreateRowSorter
JTable
Чтобы получить комментарий от kd304, вы можете использовать GlazedLists . Там вы будете использовать FilterList в качестве входных данных для JTable, а FilterList позаботится обо всем остальном.