15

我必须实现一个 JTable,其中必须(总是)选择恰好一行。不允许空选。我在初始化期间选择第一行:

table.setRowSelectionInterval(0, 0);

另外,我正在使用

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

但是用户仍然可以使用 CLick + Ctrl 取消选择一行。

确保始终在表中选择一个(精确)行的最简单方法是什么?

4

6 回答 6

25

如果您创建了一个 JTable 实例,只需使用:

jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
于 2015-11-17T11:55:09.393 回答
18

现在,您可以添加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());
于 2013-08-19T10:35:08.357 回答
4

确保始终在表中选择一个(精确)行的最简单方法是什么?

有三种(基本上)选择类型

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

编辑

也适合我

int row = table.getSelectedRow();
    if ((row > -1)) {
        table.setRowSelectionInterval(row, row);
    }
}
于 2013-08-19T08:28:55.607 回答
1

我会使用JTable#setRowSelectionAllowed,因为它将确保可以选择一行。

于 2013-08-19T08:33:25.057 回答
0

先做

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

然后设置ListSelectionModel

于 2017-06-19T14:38:46.883 回答
0

此代码将其更改回所需的索引,并为用户提供它从未更新的外观。

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(
    new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
            table.setRowSelectionInterval(0,0);
        }
);
于 2016-06-26T19:14:21.770 回答