Ich habe eine JTable mit vielen Zeichenfolgen in diesem. Ich habe ein Textfeld für den Benutzereintrag oberhalb der Tabelle erstellt. Ich möchte einen Zeilenfilter, der die Zeilen mit Zeichenfolgen entfernen kann, die vom Benutzer in das Textfeld eingegeben wurden. Bitte hilf mir dabei.Wie kann ich Zeilen in einer JTable filtern?
Antwort
von hier:
sorting and filtering
Im folgenden Beispielcode Sie explizit einen Sortierer erstellen Objekt so Sie können es später einen Filter festlegen,:
MyTableModel model = new MyTableModel(); sorter = new TableRowSorter<MyTableModel>(model); table = new JTable(model); table.setRowSorter(sorter);
Dann Sie filtern basierend auf dem aktuellen Wert eines Textfelds:
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); }
Sie können JTable.setAutoCreateRowSorter
verwenden, die die Standardzeile Sorter/Filter des JTable
Um abholen den Kommentar von kd304 verwenden, könnten Sie GlazedLists verwenden. Dort verwenden Sie eine FilterList als Eingabe für Ihre JTable, und die FilterList kümmert sich um den Rest.
Diese Lösung paar Linie scheint zu funktionieren:
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);
}
regexFilter zeigt einen Fehler an – humphrey
haben Sie nur die Zeilen mit dem Text oder nicht angezeigt werden Zeilen mit dem Text angezeigt werden soll? – Victor
Wenn Sie erlaubt sind, können Sie GlazedLists verwenden. Es enthält Beispiele zur automatischen Vervollständigung und Tabellenfilterung. – akarnokd