java - 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);
非常感谢您的帮助!
解决方案
你需要这样的东西:
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)
}
}
};
推荐阅读
- django - Django通过调用函数视图重定向?
- puppeteer - Backstop timeout 会导致致命,阻止任何结果:我怎样才能让 backstop / puppeteer 显示哪个 URL 失败?
- java - 如何在不更改代码的情况下在 UI/UX 中配置基于 Rest API-URI 的版本控制端点?
- angular - 为什么订阅返回 FireStore 文档快照列表的 Observable 我无法构建正确的对象列表?我获得未定义的对象
- excel - SUM(SUMIFS) 在同一行中查找多个条件 - 不起作用
- excel - 在代码中生成复选框时,如何更改 VBA 中用户窗体的复选框大小?
- reactjs - 提交后如何清除输入字段
- r - 将绘图插图(子图)和多个标准差添加到 ggplot(),并根据 R 中的条件进行过滤
- memory - 在修改后的哈佛架构中,数据和指令是否在数据总线中隔离?
- url-rewriting - 使用 CPT slug 修改自定义分类 slug