首页 > 解决方案 > Java Swing:稍微修改现有的键盘行为?(右箭头最初应将光标设置为位置 0)

问题描述

如果 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);

非常感谢您的帮助!

标签: javaswingkeyboard-events

解决方案


你需要这样的东西:

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)
    }
  }
};

推荐阅读