質問

ボタンをクリックすると、選択した行を反転させたい(選択されていない行を選択し、選択した行を選択しないでください)。

Jtableにそれを行うためのビルドインメソッドはありますか?

役に立ちましたか?

解決

JTableはこれを行うための組み込みの方法がないようです。そこで、次のコードで実装しました。 (これが同様の問題に直面している人に役立つことを願っています。)

int[] selectedIndexs = jtable.getSelectedRows();
jtable.selectAll();

for (int i = 0; i < jtable.getRowCount(); i++) {
    for (int selectedIndex : selectedIndexs) {
        if (selectedIndex == i) {
            jtable.removeRowSelectionInterval(i, i);
            break;
        }
    }
}

他のヒント

Sudarの解決策を簡素化するには:

int[] selectedIndices = table.getSelectedRows();
table.selectAll();
for (int prevSel : selectedIndices) {
    table.removeRowSelectionInterval(prevSel, prevSel);
}

JTableにはその機能がありません

いいえ、カットソムを実装する必要があります ListSelectionListener

上記の改良点は、テーブルオブジェクトではなく、選択モデルオブジェクトを使用して選択を更新することです。テーブルを介して選択を更新すると、各更新で選択変更イベントが発生し、数百行でテーブルを更新するのに数秒かかります。

数百列以上のテーブルの最速の方法はこれです

/**
 * Invert selection in a JTable.
 *
 * @param table
 */
public static void invertSelection(JTable table) {
    ListSelectionModel mdl = table.getSelectionModel();
    int[] selected = table.getSelectedRows();
    mdl.setValueIsAdjusting(true);
    mdl.setSelectionInterval(0, table.getRowCount() - 1);
    for (int i : selected) {
        mdl.removeSelectionInterval(i, i);
    }
    mdl.setValueIsAdjusting(false);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top