当前位置: 首页 > 面试题库 >

在Tab键按下时将焦点从Jtable中的一个单元格转移到另一个单元格

潘文乐
2023-03-14
问题内容

摘要:

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

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

可能的解决
方案我想到的一个解决方案是获取正在使用的单元格的索引,将其与全局变量相同,然后在Tab键上按一下,我可以获取下一个单元格的索引并专注于该单元格。不知何故,它不起作用。

请提出建议。

提前致谢..


问题答案:

我想起来了,我认为我们可以keystroke通过Tabs 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.getEditingRowJTable.getEditingColumn方法来评估当前单元格(您还希望通过来检查表是否处于编辑模式JTable.isEditing,否则您需要使用JTable.getSelectedRowJTable.getSelectedColumn-实际上,您可能只是这样做而已,但是这就是我解决问题的方式)。

从那里开始,您要遍历单元格,直到找到可编辑的单元格。

基本上,您要检查到当前行的末尾,然后移至下一行直到不存在更多行,这取决于您要执行的操作,您可以选择循环回到表的开头(单元格0x0)并步行直到到达当前位置。

注意,如果不注意:P,您可能会陷入连续循环。

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

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

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



 类似资料:
  • 总结: 在我的桌面应用程序中,我加载一个Jtable,当处于编辑模式时,如果我按选项卡,我需要将单元格的焦点放在下一个单元格上。 问题:当我编辑单元格的值,然后按Tab键时,焦点丢失。我在网上做了一些搜索,发现这是因为在每个选项卡上按Jtable会重新加载自己。 可能的解决方案我正在考虑的一个解决方案是获取我正在处理的单元格的索引,在全局变量中也是如此,然后按Tab键可以获取下一个单元格的索引,并

  • 让我介绍一下我的问题的场景。我希望在JTable中呈现数据库表的内容。使用这个JTable,我应该能够插入新行、删除行和更新现有行字段的内容。 第一个需要的行为是,当单元格获得焦点时,如果它是可编辑的,它直接进入编辑模式,如果它是字母数字内容,它的所有内容都被选中。(文字、数字、日期等) 下一个需要的行为是键作为键工作,即按键焦点必须向前(从左到右)或向后转移到下一个单元格(如果这是可编辑的,则进

  • 我在Angular 1.x上发现了一些项目,用户可以通过按Enter键将焦点移到下一个控件上。 但这对Angular 2不起作用。我如何在Ingular 2中设置对下一个控件的焦点?

  • 我的excel工作表中有两个单元格,其中一个单元格包含如下字符串: 而另一个单元格有欧元货币,例如: 现在我想复制这两个值,即“总额”和“223.463.687€”,并将其复制到第三个单元格中。我使用的公式是这样的: 我得到以下结果: 但是我应该: 注: 货币的格式是德语格式,意思是“.”(小数点)和“,”(昏迷)扮演相反的角色。在德语格式中,“,”是小数点,在英语中是“。”。

  • 我想要的是让第一个textField更靠近第一个jlabel,在第一个textField和第二个jlabel之间有一些空间,像这样: JLabel:JTEXTFIELD-----(spaceeee)-------JLabel:JTEXTFIELD 但我所改变的一切都不能接近我想要的,你看:

  • 问题内容: JTable的默认行为是将焦点更改为下一个单元格,我想在按TAB键时强制其将焦点移至下一个组件(例如JTextField)。 我重写的方法始终返回false: 但这仍然不会改变对下一个组件的关注! 我应该如何将重点放在下一个组件而不是下一个单元格上? 问题答案: 如果确实要这样做,则需要更改表操作映射的默认行为。 然后,您需要执行一些操作来处理遍历 另一种方法是禁用底层… (尚未测试)