【问题标题】:Detect combination key in JTextField?在 JTextField 中检测组合键?
【发布时间】:2012-01-22 00:35:41
【问题描述】:

如何在JTextField 中检测组合键 Shift+Tab

【问题讨论】:

标签: java swing keypress


【解决方案1】:

这是你想要的吗?

javax.swing.JTextField textField = new javax.swing.JTextField();
textField.setFocusTraversalKeysEnabled(false);
javax.swing.Action myAction = new javax.swing.AbstractAction()
{
  public void actionPerformed(ActionEvent e)
  {
    //Insert arbitrary code here
  }
};
textField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, Event.SHIFT_MASK), "myCode");
textField.getActionMap().put("myCode", myAction);

【讨论】:

  • 不使用KeyListener这是错误的方式,Swing JComponents被指定使用KeyBinding,只有KeyBindings可以覆盖内置的key-shortcuts,只有你设置的KeyBindings工作,当JComponents有Fosus时只有KeyBindings忽略,或不忽略,如您设置的那样
  • 我已经修改了我的示例,改为使用键绑定
【解决方案2】:

这有点特殊,因为 Shift+Tab 是一个焦点遍历键。焦点子系统通常会使用焦点遍历键,因此您需要通过调用

来防止这种情况发生
component.setFocusTraversalKeysEnabled(false);

在您的JTextField 上。然后,您将能够检测到 Shift+Tab 组合并自行处理。

请参阅 How to Write a Key Listener 获取示例程序,您可以下载并试用以了解其工作原理。

【讨论】:

  • +1,用于关闭力遍历。 -1,用于建议 KeyListener。不要使用 KeyListener。 Swing 被设计为使用键绑定。阅读同一教程中有关“如何使用键绑定”的部分。
【解决方案3】:

TabShift+Tab 仅/默认情况下(只有 KeyBinding 可以更改)关于将 Focus 从一个移动JComponent 到另一个,我认为你必须在FocusSubsystem 中查看FocusListener 的详细描述,注意Focus 来自Native OS,默认情况下是asynchronous,大部分时间都需要延迟他们的行动/事件封装到invokeLater()

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多