摘要:
在我的桌面应用程序中,我加载了一个Jtable,并且在编辑模式下(如果我按Tab键)我需要将单元格的焦点放在下一个单元格上。
问题: 当我编辑单元格的值,然后按Tab时,焦点丢失。我在网上做了一些搜索,发现发生这种情况是因为在每个Tab上按下Jtable都会重新加载自身。
可能的解决 方案我想到的一个解决方案是获取正在使用的单元格的索引,将其与全局变量相同,然后在Tab键上按一下,我可以获取下一个单元格的索引并专注于该单元格。不知何故,它不起作用。
请提出建议。
提前致谢..
我想起来了,我认为我们可以keystroke通过Tabs InputMap和中的自定义实现来克服这一问题ActionMap。
keystroke
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-实际上,您可能只是这样做而已,但是这就是我解决问题的方式)。
ContinousEditAction
JTable.getEditingRow
JTable.getEditingColumn
JTable.isEditing
JTable.getSelectedRow
JTable.getSelectedColumn
从那里开始,您要遍历单元格,直到找到可编辑的单元格。
基本上,您要检查到当前行的末尾,然后移至下一行直到不存在更多行,这取决于您要执行的操作,您可以选择循环回到表的开头(单元格0x0)并步行直到到达当前位置。
注意,如果不注意:P,您可能会陷入连续循环。
如果找不到任何可编辑的单元格,则可能只希望使用JTable.setRowSelectionInterval&选择下一个可用的单元格,否则JTable.setRowSelectionInterval可以调用JTable.editCellAt(nextRow, nextCol)
JTable.setRowSelectionInterval
JTable.editCellAt(nextRow, nextCol)
但这一切都取决于您要实现的目标。
另外,您可以将相同的想法应用于Enter键;)