2009-07-10 8 views
3

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?

+0

haben Sie nur die Zeilen mit dem Text oder nicht angezeigt werden Zeilen mit dem Text angezeigt werden soll? – Victor

+3

Wenn Sie erlaubt sind, können Sie GlazedLists verwenden. Es enthält Beispiele zur automatischen Vervollständigung und Tabellenfilterung. – akarnokd

Antwort

8

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

Sie können JTable.setAutoCreateRowSorter verwenden, die die Standardzeile Sorter/Filter des JTable

1

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.

5

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

regexFilter zeigt einen Fehler an – humphrey