行ではなく列(ヘッダー値)でJTableを(検索JTextFieldを使用して)フィルタリングするための実装がJavaにありますか?検索時に見つかった文字列に従って表示/非表示にする列が必要です。
3 に答える
行ではなく列 (ヘッダー値) で JTable を (検索 JTextField を使用して) フィルター処理する Java の実装はありますか?
- はい、RowFilterを見て、必要な列に適用します
検索時に見つかった文字列に従って表示/非表示にする列が必要です。
簡単な仕事ではありません。多くの労力と、 に関する優れた知識
Java Essential classes
、Swing
および専門家である必要があるためです。JTable
私はこのようには行かず、適切なを使用し、画面上
ColumnRender
でジャンプ(非表示->表示--->非表示など)する代わりに、列を強調表示する必要がJTables Column
ありますについての例がいくつかあり
RowFilter
ますRowSorter
。
実際のモデルをラップするカスタムTableModel実装を使用して、フィルタリングを行うことができます。列が変更されるたびに、TableModelListeners に通知し続けるだけです。
私はそれが次のように機能していると思います:
非表示の列を保持する一時テーブルとテーブル モデルのグローバル変数を宣言します。
private JTable hiddenTable = new JTable();
private DefaultTableColumnModel hiddenModel = new DefaultTableColumnModel();
次に、押されたすべてのキーに対してフィルター メソッドを使用して、非表示にする列を一時テーブル モデルに追加し、メイン テーブル モデルから列を削除します。次に、それらをメイン テーブルに追加し直し、一時テーブルから削除することで、文字列が一致したときにそれらを再度表示します。
private void filterList() {
// Hide columns
for (TableColumn column : table.getColumns()) {
if (!((String) column.getHeaderValue()).toLowerCase().contains(
searchBox.getText().toLowerCase().trim())) {
hiddenModel.addColumn(column);
table.getColumnModel().removeColumn(column);
}
}
// Show columns
for (TableColumn column : hiddenTable.getColumns()) {
if (((String) column.getHeaderValue()).toLowerCase().contains(
searchBox.getText().toLowerCase().trim())) {
table.getColumnModel().addColumn(column);
hiddenModel.removeColumn(column);
}
}
}
ここでの唯一の問題は、テーブルに追加し直すと列の順序が失われることです。