在标签按下的Jtable中将焦点从一个单元格移动到另一个单元格

摘要:

在我的桌面应用程序中,我加载一个Jtable,当处于编辑模式时,如果我按Tab键,我需要将单元格的焦点放在下一个单元格上。

问题:当我正在编辑单元格的值时,然后当我按Tab键时,焦点丢失。 我在网上做了一些搜索,我发现它发生了,因为在每个Tab上按下Jtable重新加载自己。

可能的解决方案我想到的一个解决方案是获取我正在工作的单元格的索引,在全局变量中相同,然后在Tab按下我可以得到下一个单元格的索引并将焦点设置在该单元格上。 不知怎的,它不起作用。

请建议。

提前致谢..

在我的脑海中,我认为我们通过选项卡InputMapActionMap中的自定义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.getEditingRowJTable.getEditingColumn方法来检查当前单元格(你还想通过JTable.isEditing检查表是否是编辑模式,否则你需要使用JTable.getSelectedRowJTable.getSelectedColumn – 实际上你可能会这样做,但这就是我解决问题的方法)。

从那里,您想要走细胞,直到找到可编辑的细胞。

基本上,您要检查当前行的末尾,然后移动到下一行,直到不再存在行,具体取决于您要执行的操作,您可以选择循环回到表的开头(单元格0x0)然后走到你到达目前的位置。

小心,如果你不小心,你可以最终连续循环:P。

如果找不到任何可编辑单元格,您可能只希望使用JTable.setRowSelectionIntervalJTable.setRowSelectionInterval选择下一个可用单元格, JTable.setRowSelectionInterval可以调用JTable.editCellAt(nextRow, nextCol)

但这一切都取决于你想要实现的目标。

此外,您可以将相同的想法应用于Enter键;)

通常选项卡一旦获得焦点就在jTable中工作。如果要通过按Tab键编辑下一个单元格,请在jTable的键释放事件中给出以下代码。

  if (evt.getKeyCode() == 9) { jTable1.editCellAt(nextRowIndex, nextColumnIndex); }