概要:
在我的桌面应用程序中,我加载一个Jtable,当处于编辑模式时,如果我按Tab键,需要将光标焦点移动到下一个单元格。
问题: 当我正在编辑单元格的值,然后按Tab键时,焦点会丢失。我在网上搜索了一些信息,发现这是因为每次按Tab键时,Jtable都会重新加载。
可能的解决方案: 我想到的一个解决方案是获取我正在工作的单元格的索引,在全局变量中保存它,然后在按Tab键时,可以获取下一个单元格的索引并将焦点设置在该单元格上。 但不知何故它没有起作用。
请建议。
提前致谢。
概要:
在我的桌面应用程序中,我加载一个Jtable,当处于编辑模式时,如果我按Tab键,需要将光标焦点移动到下一个单元格。
问题: 当我正在编辑单元格的值,然后按Tab键时,焦点会丢失。我在网上搜索了一些信息,发现这是因为每次按Tab键时,Jtable都会重新加载。
可能的解决方案: 我想到的一个解决方案是获取我正在工作的单元格的索引,在全局变量中保存它,然后在按Tab键时,可以获取下一个单元格的索引并将焦点设置在该单元格上。 但不知何故它没有起作用。
请建议。
提前致谢。
我想起来了,我们通过在选项卡的InputMap
和ActionMap
中实现自定义keystroke
来解决这个问题。
我们使用的实现方式允许我们执行“连续”编辑,也就是说,当用户按下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.getSelectedRow
和JTable.getSelectedColumn
- 实际上只使用这些方法可能就足够了,但这是我解决问题的方式)。JTable.setRowSelectionInterval
和JTable.setRowSelectionInterval
选择下一个可用单元格,否则您可以调用JTable.editCellAt(nextRow, nextCol)
。但这完全取决于您想要实现什么样的功能。通常情况下,在 jTable 上获取焦点后会使用 Tab 键。如果你想通过按 Tab 键编辑下一个单元格,请在 jTable 的键释放事件中添加以下代码。
if (evt.getKeyCode() == 9) {
jTable1.editCellAt(nextRowIndex, nextColumnIndex);
}