【发布时间】:2012-08-09 14:58:45
【问题描述】:
我有一个由多行和多列组成的 JTable。我想让单元格可选择,但一次只能在一行中。因此,例如,当我单击第三行第五列的单元格时,我可以向左或向右拉鼠标并选择更多单元格,但只能在该特定行中,而不是在上面或下面的行中。
我该怎么做?
【问题讨论】:
标签: java swing jtable listselectionlistener
我有一个由多行和多列组成的 JTable。我想让单元格可选择,但一次只能在一行中。因此,例如,当我单击第三行第五列的单元格时,我可以向左或向右拉鼠标并选择更多单元格,但只能在该特定行中,而不是在上面或下面的行中。
我该怎么做?
【问题讨论】:
标签: java swing jtable listselectionlistener
使用ListSelectionModel接口中的setSelectionMode()方法,并将选择模式设置为ListSelectionModel.SINGLE_SELECTION。
这会将JTable 配置为一次选择一行,阻止选择多行。
要选择单个单元格,请将上面的内容与TableColumnModel 上的setColumnSelectionAllowed(true) 结合起来,您应该会得到所需的内容。
【讨论】:
setColumnSelectionAllowed(), setRowSelectionAllowed() 和setCellSelectionEnabled(),但似乎没有组合可以解决问题。
ListSelectionModel了。
DefaultListSelectionModel源代码。尤其是在选择间隔上操作的方法。也许对该代码稍作改动(如不清除现有选择,如果它在同一行中)将满足您的需求。
DefaultListSelectionModel 并覆盖了setSelectionInteval(),为新的选择情况添加了一个新常量,并覆盖了构造函数以使其工作。修改后的 setSelectionInterval() 方法现在看起来像这样:public void setSelectionInterval(int index0, int index1) { if(selectionMode == SINGLE_ROW_MULTIPLE_CELLS_SELECTION) index1 = index0; super.setSelectionInterval(index0, index1); }