web-dev-qa-db-ja.com

JTable-ユーザーに1行だけを選択させる方法

(常に)正確に1つの行を選択する必要があるJTableを実装する必要があります。空の選択は許可されていません。初期化中に最初の行を選択しています:

table.setRowSelectionInterval(0, 0);

さらに、私は使用しています

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

ただし、ユーザーはCLick + Ctrlを使用して1つの行の選択を解除できます。

テーブルで常に1つの(exaclty)行が選択されるようにする最も簡単な方法は何ですか?

11
guitar_freak

これで、MouseListeners、SelectionListeners、KeyListenersとキーバインディングを追加して、これを解決しようとすることができます。または、問題の核心にたどり着くことができます。

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());
16
MadProgrammer

JTableインスタンスを作成している場合は、次を使用してください。

jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
21

3つの(基本的に)選択タイプがあります

JTable.setRowSelectionAllowed(boolean); JTable.setColumnSelectionAllowed(boolean); JTable.setCellSelectionAllowed(boolean);

編集

私にも効く

int row = table.getSelectedRow(); if ((row > -1)) { table.setRowSelectionInterval(row, row); } }

4
mKorbel

JTable#setRowSelectionAllowed を使用すると、行を確実に選択できるようになります。

1
blackpanther

最初に行う

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setRowSelectionInterval(0, 0);

次に、ListSelectionModelを設定します

0
indika

このコードは、それを目的のインデックスに戻し、更新されないようにユーザーに見せます。

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(
    new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
            table.setRowSelectionInterval(0,0);
        }
);
0
Matt Reinhart