【问题标题】:Remove Enter key binding in JTable删除 JTable 中的 Enter 键绑定
【发布时间】:2014-09-08 15:34:02
【问题描述】:

在 JTable 中删除标准回车键绑定(按回车键选择下一行)的最简单和最快的方法是什么?

我试过了

table.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), null);

但它不起作用。我假设我们必须以某种方式为每个单元格而不是表格本身这样做。

【问题讨论】:

    标签: java swing jtable key-bindings


    【解决方案1】:

    JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENTJComponent.WHEN_IN_FOCUSED_WINDOW 具有输入键击的值。所以你想同时得到它们

    更正:您需要为WHEN_ANCESTOR_OF_FOCUSED_COMPONENT 获取InputMap

    InputMap iMap1 = 
             table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    //InputMap iMap2 = 
            // table.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    

    然后您想将映射的值设置为"none",而不是null,如How to Use Key Bindings 中所述。

    要使组件忽略它通常响应的键,您可以使用特殊操作名称“none”。例如,以下代码使组件忽略 F2 键。

    component.getInputMap().put(KeyStroke.getKeyStroke("F2"), "none");

    那就这样吧:

    KeyStroke stroke = KeyStroke.getKeyStroke("ENTER");
    iMap1.put(stroke, "none");
    //iMap2.put(stroke, "none");
    

    还请注意,当您不带任何参数只执行getInputMap() 时,它与getInputMap(JComponent.WHEN_FOCUSED) 基本相同。在JTable 的情况下,InputMap 的回车键没有任何价值。

    How to Use Key Bindings 阅读更多信息。您将更好地解释不同的InputMaps


    UPDATE :更正(在上面进行的更正删除// commented out

    你只为InputMap设置它为JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT


    UPDATE 根据 OP 评论:简而言之是

    table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
                                 .put(KeyStroke.‌​getKeyStroke("ENTER"), "none");
    

    【讨论】:

    • 总结一下:table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("ENTER"), "none"); 完成了这项工作。谢谢!
    【解决方案2】:

    这似乎是最方便的方式:

    table.registerKeyboardAction(
        null,
        KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
        JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
    );
    

    若要分配操作,请将 null 替换为 ActionListener 调用或在 JDK 1.8 中替换为 e -> someMethod()

    【讨论】:

      【解决方案3】:

      更新:
      David Kroukamp 解决方案:

      private void createKeybindings(JTable table) {
      table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
          table.getActionMap().put("Enter", new AbstractAction() {
              @Override
              public void actionPerformed(ActionEvent ae) {}
          });
      }
      

      对你来说应该足够了:

      table.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
      table.getActionMap().put("Enter",null);
      

      我不知道是否可以使用null,你可以使用匿名类代替...

      【讨论】:

      猜你喜欢
      • 2019-03-08
      • 2011-08-30
      • 2017-05-05
      • 2023-03-24
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多