2

概括:

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

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

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

请建议。

提前致谢..

4

2 回答 2

5

在我的脑海中,我认为我们通过keystroke在 tabes InputMap&中的自定义实现克服了这个问题ActionMap

我们使用的实现允许我们执行“连续”编辑,即当用户按下回车键或 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)

但这一切都归结为您想要实现的目标。

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

于 2012-07-26T10:22:32.553 回答
3

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

 if (evt.getKeyCode() == 9) {
            jTable1.editCellAt(nextRowIndex, nextColumnIndex);
    }
于 2012-07-27T06:04:52.523 回答