JCheckBox 行選択を使用して JTable から選択された行を効率的に取得する方法

Susan Sarandon
リリース: 2024-11-22 13:03:17
オリジナル
595 人が閲覧しました

How to Efficiently Get Selected Rows from a JTable with JCheckBox Row Selection?

選択行追跡による JTable の選択行の取得

問題:
選択行の効率的な取得行選択用の最初の列に JCheckBox がある JTable。行数が多いと、順次トラバーサルは非効率的になります。

従来のアプローチ:
すべての行を順次反復して、選択された行を取得します。このアプローチは、数千行を処理する場合に問題があります。

提案されたアプローチ:
モデルベースの追跡:

  • 更新Set JCheckBox 値が変更されるたびに、選択された行インデックスが含まれます。
  • テーブル モデルのリスナー クラスは、Set を更新します。行選択に基づきます。

コード例:

import javax.swing.table.AbstractTableModel;
import java.util.Set;
import java.util.TreeSet;

public class CheckModel extends AbstractTableModel {

    // ...

    private Set<Integer> checked = new TreeSet<>();

    // ...

    @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);
    }
}
ログイン後にコピー

追加の最適化:

  • TreeSet などの軽量のデータ構造を使用して、選択した行インデックスを効率的に保存します。
  • メモリ消費が問題になる場合は、選択した行を保存するために別のデータ構造を使用することを検討してください。

モデルベースのアプローチの利点:

  • 合計行数に関係なく、選択した行に定期的にアクセスします。
  • 順次走査する必要がないため、選択の取得が非常に効率的になります。

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

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