我想起来了,我认为我们可以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键;)