Java JTable-如何强制用户只选择一行
我必须实现一个JTable,其中必须选择一行(始终)。不允许空选择。我在初始化期间选择第一行:Java JTable-如何强制用户只选择一行,java,swing,jtable,Java,Swing,Jtable,我必须实现一个JTable,其中必须选择一行(始终)。不允许空选择。我在初始化期间选择第一行: table.setRowSelectionInterval(0, 0); 另外,我正在使用 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 但用户仍然可以使用CLick+Ctrl取消选择一行 确保表中始终选择一(exaclty)行的最简单方法是什么 最简单的方法是什么,确保一行(例如)始终为空 在表格中选择 有三种(基本上)
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取消选择一行。”他们还声明“不允许空选择”-这还不够…因为这是他们已经在做的事情