我必须实现一个 JTable,其中必须(总是)选择恰好一行。不允许空选。我在初始化期间选择第一行:
table.setRowSelectionInterval(0, 0);
另外,我正在使用
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
但是用户仍然可以使用 CLick + Ctrl 取消选择一行。
确保始终在表中选择一个(精确)行的最简单方法是什么?
如果您创建了一个 JTable 实例,只需使用:
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
现在,您可以添加MouseListener
s、SelectionListener
s、KeyListener
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.setRowSelectionAllowed(boolean);
JTable.setColumnSelectionAllowed(boolean);
JTable.setCellSelectionAllowed(boolean);
编辑
也适合我
int row = table.getSelectedRow();
if ((row > -1)) {
table.setRowSelectionInterval(row, row);
}
}
我会使用JTable#setRowSelectionAllowed,因为它将确保可以选择一行。
先做
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setRowSelectionInterval(0, 0);
然后设置ListSelectionModel
此代码将其更改回所需的索引,并为用户提供它从未更新的外观。
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
table.setRowSelectionInterval(0,0);
}
);