2009-07-10 11 views
3

私はそれに多くの文字列を持つJTableを持っています。私はテーブルの上にユーザーエントリのためのテキストボックスを作成しました。私は、テキストボックスにユーザーが入力した文字列を持つ行を削除する行フィルタが必要です。このために私を助けてください。ここからJTableの行をどのようにフィルタリングできますか?

+0

あなたは、テキストのみの行を表示したり、テキストの行を表示しないようにしたいですか? – Victor

+3

許可されている場合は、GlazedListsを使用できます。自動補完とテーブルフィルタリングに関するサンプルがあります。 – akarnokd

答えて

8

:次に

MyTableModel model = new MyTableModel(); 
sorter = new TableRowSorter<MyTableModel>(model); 
table = new JTable(model); 
table.setRowSorter(sorter); 

:次のコード例で
sorting and filtering

、明示的ソーターオブジェクトを作成 ので あとで フィルタを指定するためにそれを使用することができますテキストフィールドの現在の 値に基づいてフィルタリングします。

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

あなたはkd304からのコメントを拾うためにJTable

1

のデフォルトの行ソーター/フィルタを使用しますJTable.setAutoCreateRowSorterを使用することができ、あなたはGlazedListsを使用することができます。そこでは、JTableの入力としてFilterListを使用し、残りの処理をFilterListが処理します。

5

この数ラインソリューションは、動作しているようです:

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がエラーを示しています – humphrey