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

Java JTable-如何强制用户只选择一行,java,swing,jtable,Java,Swing,Jtable,我必须实现一个JTable,其中必须选择一行(始终)。不允许空选择。我在初始化期间选择第一行: table.setRowSelectionInterval(0, 0); 另外,我正在使用 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 但用户仍然可以使用CLick+Ctrl取消选择一行 确保表中始终选择一(exaclty)行的最简单方法是什么 最简单的方法是什么,确保一行(例如)始终为空 在表格中选择 有三种(基本上)

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

table.setRowSelectionInterval(0, 0);
另外,我正在使用

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
但用户仍然可以使用CLick+Ctrl取消选择一行

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

最简单的方法是什么,确保一行(例如)始终为空 在表格中选择

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

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

我也是

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

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

现在,您可以添加
MouseListener
s、
SelectionListener
s、
keystener
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);

这段代码将其直接更改回所需的索引,并为用户提供从未更新的外观

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

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

然后亲自设置
ListSelectionModel

,提供一个自定义的
ListSelectionModel
会更容易,并且避免需要一堆可能相互矛盾的侦听器-IMHOinteresting+1,但我编辑的代码来自ListSelectionListener和SetCellSelectionLowe,我没有说这是错误的(使用ListSelectionListener),但您开始遇到这样的问题:“我是刚做了更改还是开始通知我,还是由其他原因生成的?”最后是所有这些有趣的旗帜和可以避免的东西-Imhot这个答案不必要的复杂,看看下面的单行答案!@根据我的经验,这并不总是像预期的那样有效-还要注意“不允许空选择”,因为这是OP已经在做的事情,他们说“但用户仍然可以使用CLick+Ctrl取消选择一行。”他们还声明“不允许空选择”-这还不够…因为这是他们已经在做的事情