jtableの選択を反転させます
質問
ボタンをクリックすると、選択した行を反転させたい(選択されていない行を選択し、選択した行を選択しないでください)。
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);
}
所属していません StackOverflow