如果 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/