AbstractTableModel を使用して JTable から選択された行を効率的に取得するにはどうすればよいですか?

DDD
リリース: 2024-11-20 00:46:02
オリジナル
662 人が閲覧しました

How Can I Efficiently Get Selected Rows from a JTable Using AbstractTableModel?

AbstractTableModel を使用して JTable で選択された行を効率的に取得する

AbstractTableModel で JTable を使用する場合、選択された行を取得することが重要なタスクになる可能性があります。ただし、すべての行を反復処理して選択したセルをチェックする従来のアプローチは、大規模なデータセットを扱う場合に非効率になる可能性があります。

この課題に対処するには、セルの値が更新されるたびに選択した行のセットを更新する方が良い方法です。変化します。以下の例では、チェックされた Set を保持する TableModel と、選択された行番号を表示する JList を実装します。

import java.util.Set;
import java.util.TreeSet;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

public class CheckModel extends AbstractTableModel {

    private int rows;
    private List<Boolean> rowList;
    private Set<Integer> checked = new TreeSet<>();

    public CheckModel(int rows) {
        this.rows = rows;
        rowList = new ArrayList<>(rows);
        for (int i = 0; i < rows; i++) {
            rowList.add(Boolean.FALSE);
        }
    }

    @Override
    public void setValueAt(Object aValue, int row, int col) {
        boolean b = (Boolean) aValue;
        rowList.set(row, b);
        if (b) {
            checked.add(row);
        } else {
            checked.remove(row);
        }
        fireTableRowsUpdated(row, row);
    }

    public Set<Integer> getCheckedRows() {
        return checked;
    }
}
ログイン後にコピー

このモデルでは、setValueAt メソッドは rowList とチェックされた Set の両方を更新します。選択したセルが変更されると、TableModelListener に通知され、JList が更新されて現在選択されている行が表示されます。

このアプローチでは、すべての行を走査してセルを変更する必要がなくなるため、特に大規模なデータセットのパフォーマンスが大幅に向上します。どれが選択されるかを決定します。また、選択の変更を効率的にリスニングしたり、選択した行を簡単に取得したりすることもできます。

以上がAbstractTableModel を使用して JTable から選択された行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート