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 サイトの他の関連記事を参照してください。