要点:
在我的桌面应用程序中,我加载了一个Jtable,当处于编辑模式时如果我按下tab,我需要将单元格的焦点放在下一个单元格上。
问题: 当我正在编辑单元格的值时,然后当我按Tab键时,焦点将丢失。我在网上做了一些搜索,我发现它发生了,因为在每个Tab上按下Jtable重新加载。
可能的解决方案 我想到的一个解决方案是获取我正在工作的单元格的索引,在全局变量中相同,然后在Tab按下我可以获得下一个单元格的索引并将焦点设置在该单元格上。 不知怎的,它不起作用。
请建议。
提前致谢..
答案 0 :(得分:4)
在我的脑海中,我认为我们通过标签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
- 事实上您可能会侥幸逃脱这样做,但这就是我解决问题的方法。)
从那里开始,您需要遍历单元格,直到找到可编辑的单元格。
基本上,你要检查当前行的末尾,然后移动到下一行,直到不再存在行,这取决于你想要做什么,你可以选择循环回到表的开头(单元格0x0)然后走到你到达当前位置。
小心,如果你不小心,你可以最终连续循环:P。
如果您没有找到任何可编辑的单元格,您可能只希望使用JTable.setRowSelectionInterval
&选择下一个可用的单元格。 JTable.setRowSelectionInterval
,您可以致电JTable.editCellAt(nextRow, nextCol)
但这一切都取决于你想要实现的目标。
此外,您可以将相同的想法应用于输入键;)
答案 1 :(得分:3)
正常情况下,一旦获得焦点,制表符在jTable中工作。如果您想通过按Tab键编辑下一个单元格,请在jTable的键释放事件中给出以下代码。
if (evt.getKeyCode() == 9) {
jTable1.editCellAt(nextRowIndex, nextColumnIndex);
}