我想起来了,我认为我们可以
keystroke通过Tabs
InputMap和中的自定义实现来克服这一问题
ActionMap。
我们使用的实现允许我们执行“连续”编辑,也就是说,当用户按下Enter或Tab键时,我们移至下一个可编辑单元格并开始编辑
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);ActionMap am = table.getActionMap();KeyStroke tabKey = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);Action moveNextCellAction = am.get(im.get(tabKey));ContinousEditAction continousEditAction = new ContinousEditAction(table, moveNextCellAction);im.put(tabKey, "Action.tab");am.put("Action.tab", continousEditAction);该
ContinousEditAction负责寻找下一个可编辑单元格。基本上,当操作被触发时,您可以通过
JTable.getEditingRow&
JTable.getEditingColumn方法来评估当前单元格(您还希望通过来检查表是否处于编辑模式
JTable.isEditing,否则您需要使用
JTable.getSelectedRow&
JTable.getSelectedColumn-实际上,您可能只是这样做而已,但是这就是我解决问题的方式)。
从那里开始,您要遍历单元格,直到找到可编辑的单元格。
基本上,您要检查到当前行的末尾,然后移至下一行直到不存在更多行,这取决于您要执行的操作,您可以选择循环回到表的开头(单元格0x0)并步行直到到达当前位置。
注意,如果不注意:P,您可能会陷入连续循环。
如果找不到任何可编辑的单元格,则可能只希望使用
JTable.setRowSelectionInterval&选择下一个可用的单元格,否则
JTable.setRowSelectionInterval可以调用
JTable.editCellAt(nextRow,nextCol)
但这一切都取决于您要实现的目标。
另外,您可以将相同的想法应用于Enter键;)



