Java Swing : slightly modify existing keyboard behaviour?(右箭头最初应将光标设置为位置 0)

标签 java swing keyboard-events

如果 Java Swing JTextField 获得焦点,它的所有文本都会被标记。

现在,我想修改行为,这样如果用户现在按下右箭头,光标应该设置到文本开头(位置 0)。

我能够获得 RIGHT Key 事件并将光标设置到位置 0, 但我不知道如何将 RIGHT Key 事件传递给原始代码,以便它可以处理正常行为。

JTextField preisFieldEUR = new JTextField(…);

AbstractAction right = new AbstractAction() {
  @Override
  public void actionPerformed(ActionEvent e) {
    if (preisFieldEUR.getSelectionEnd() - preisFieldEUR.getSelectionStart() == preisFieldEUR.getText().length()) {
      preisFieldEUR.setSelectionStart(0);
      preisFieldEUR.setSelectionEnd(0);
    } else {
      // Todo: How to pass this event to the original keyboard handler to
      // keep the normal behaviour?
    }
  }
};

preisFieldEUR.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), right);

非常感谢您的帮助!

最佳答案

你需要这样的东西:

Action oldAction = preisFieldEUR.getActionMap().get("caret-forward"); // probably another parameter?
AbstractAction right = new AbstractAction() {
  @Override
  public void actionPerformed(ActionEvent e) {
    if (preisFieldEUR.getSelectionEnd() - preisFieldEUR.getSelectionStart() == preisFieldEUR.getText().length()) {
      preisFieldEUR.setSelectionStart(0);
      preisFieldEUR.setSelectionEnd(0);
    } else {
        oldAction.actionPeformed(e)
    }
  }
};

关于Java Swing : slightly modify existing keyboard behaviour?(右箭头最初应将光标设置为位置 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57820517/

相关文章:

java - 使用单个按钮从另一个 Jlist 填充 Jlist

java - 如何使用 Point 类设置点的位置?

java - 使用 java swing 模拟 apk 文件以便在我的桌面上使用它

python - pygame在窗口未聚焦时捕获键盘事件

java - 如何修改SQL语句?

java - .proto 文件中 "Value"类的含义是什么

java - 如何使用 gradle 为 Junit 测试授予写入权限

java - EventQueue.invokeLater 与 Thread.start

macos - 如何在 OSX 中点击/ Hook 键盘事件并记录哪个键盘触发每个事件

c# - Winform键盘管理