(常に)正確に1つの行を選択する必要があるJTableを実装する必要があります。空の選択は許可されていません。初期化中に最初の行を選択しています:
table.setRowSelectionInterval(0, 0);
さらに、私は使用しています
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ただし、ユーザーはCLick + Ctrlを使用して1つの行の選択を解除できます。
テーブルで常に1つの(exaclty)行が選択されるようにする最も簡単な方法は何ですか?
これで、MouseListener
s、SelectionListener
s、KeyListener
sとキーバインディングを追加して、これを解決しようとすることができます。または、問題の核心にたどり着くことができます。
ListSelectionModel
は、選択の詳細を管理する責任があります。
行の選択に独自のListSelectionModel
を指定するだけで済みます
public class ForcedListSelectionModel extends DefaultListSelectionModel {
public ForcedListSelectionModel () {
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
@Override
public void clearSelection() {
}
@Override
public void removeSelectionInterval(int index0, int index1) {
}
}
そして、単にあなたのテーブルにそれを設定します...
table.setSelectionModel(new ForcedListSelectionModel());
JTableインスタンスを作成している場合は、次を使用してください。
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
3つの(基本的に)選択タイプがあります
JTable.setRowSelectionAllowed(boolean);
JTable.setColumnSelectionAllowed(boolean);
JTable.setCellSelectionAllowed(boolean);
編集
私にも効く
int row = table.getSelectedRow();
if ((row > -1)) {
table.setRowSelectionInterval(row, row);
}
}
JTable#setRowSelectionAllowed を使用すると、行を確実に選択できるようになります。
最初に行う
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setRowSelectionInterval(0, 0);
次に、ListSelectionModel
を設定します
このコードは、それを目的のインデックスに戻し、更新されないようにユーザーに見せます。
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
table.setRowSelectionInterval(0,0);
}
);