JTable - 如何强制用户只选择一行

gui*_*eak 10 java swing jtable

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

table.setRowSelectionInterval(0, 0);
Run Code Online (Sandbox Code Playgroud)

另外,我正在使用

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Run Code Online (Sandbox Code Playgroud)

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

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

小智 20

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

jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Run Code Online (Sandbox Code Playgroud)


Mad*_*mer 15

现在,您可以添加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) {
    }

}
Run Code Online (Sandbox Code Playgroud)

只需将它设置到您的桌子上......

table.setSelectionModel(new ForcedListSelectionModel());
Run Code Online (Sandbox Code Playgroud)


mKo*_*bel 6

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

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

JTable.setRowSelectionAllowed(boolean);
JTable.setColumnSelectionAllowed(boolean);
JTable.setCellSelectionAllowed(boolean);
Run Code Online (Sandbox Code Playgroud)

编辑

也适合我

int row = table.getSelectedRow();
    if ((row > -1)) {
        table.setRowSelectionInterval(row, row);
    }
}
Run Code Online (Sandbox Code Playgroud)