当前位置: 首页 > 知识库问答 >
问题:

按enter键时,聚焦下一个cellEditor并在JTable中选择其中的所有文本

祁星阑
2023-03-14

我希望enter键的作用类似于JTable上的tab键。我知道这个问题已经问过几次了,我使用了本页中找到的解决方案:使用Enter键就像JTable上的Tab键一样。

    KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
    KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
    InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    im.put(enter, im.get(tab));
   @Override
   public void changeSelection(int row, int column, boolean toggle, boolean extend) {
       super.changeSelection(row, column, toggle, extend);

       if (editCellAt(row, column)) {
           Component editor = getEditorComponent();
           editor.requestFocusInWindow();
       }
   }
    @Override
    public Component getTableCellEditorComponent(JTable table,
            Object value, boolean isSelected, int row, int column) {

           if (isSelected ) {
                SwingUtilities.invokeLater(new Runnable() {

                 @Override
                 public void run() {
                     textField.selectAll();
                 }
                });
          }
          return super.getTableCellEditorComponent(
                table, value, isSelected, row, column);
    }

因此,当我按下tab键时,下一个单元格被聚焦,其中的文本被选中,但当我键入enter键时,第一次单元格松开焦点,第二次enter键时,下一个单元格获得焦点,其中的文本被选中。

所以我的问题是:有没有一种方法可以让第一个从单元格中输入松散焦点,然后获得下一个单元格的焦点(这样它就像tab键一样)

共有1个答案

薛欣德
2023-03-14

我不知道这是否会有影响,但我刚刚重写了changeSelection(...)方法进行单元格选择:

if (editCellAt(row, column))
{
    Component editor = getEditorComponent();
    editor.requestFocusInWindow();
    ((JTextComponent)editor).selectAll();
}

如果无济于事,则发布一个SSCCE来演示问题。

 类似资料:
  • 在C#windows应用程序中,要导航窗体的所有控件(使用Enter键),我使用以下代码: 任何人请帮帮我。

  • 我编写了一个自定义的,这样当我键入示例的列时,除了数字之外什么都不能输入。 如果用户单击单元格一次,然后开始键入,同时仍然允许用户双击单元格开始编辑,我如何防止用户能够编辑单元格?

  • 问题内容: 我想更改JSpinner的行为,以便在单击文本时将其选中。这样可以更轻松地将字段替换为所需的值。不幸的是,我无法使该行为起作用,它只是将光标插入文本中,而没有选择已经存在的内容。 我曾尝试通过既向JSpinner本身又向文本区域本身添加了一个焦点侦听器,但这些似乎都没有达到预期的效果。我的代码(针对JSpinner本身)如下: 我不确定是什么问题。如果有关系,我正在运行Mac OS 1

  • 我正在设计一个客户机交互应用程序,其中的需求如下:- null 在单元格焦点上按下ENTER键=只编辑单元格。 单元格焦点外+按下ENTER键=添加新行。 如果单元格焦点不在,请建议添加行。并编辑单元格焦点是否存在。

  • 问题内容: 我有很多表具有相同的列“ customer_number”。我可以通过查询获取所有这些表的列表: 问题是如何从所有这些表中获取具有特定客户编号的所有记录,而不对每个表运行相同的查询。 问题答案: 我假设您要自动执行此操作。两种方法。 SQL生成SQL脚本 。 PLSQL 使用动态sql的类似想法:

  • Iam在地图中使用多个输入我想在单击“回车”时将焦点设置为下一个输入。在裁判的帮助下 Iam使用材质ui文本字段获取输入 我在react类组件中尝试了wihtout ref,但在hooks中无效,类组件代码: inputRefs=[]; 在“内部渲染”中添加了此“内部贴图”功能