You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX按键事件仅触发一次:按上键移动物件仅首次生效

解决JavaFX按键仅首次生效的问题

嘿,我来帮你排查这个问题!你的代码里有两个关键问题导致了按键仅首次生效:

1. 偏移轴的错误引用

你的begin()方法里,设置TranslateY的时候误用了getTranslateX()(X轴偏移)来计算Y轴的位置。这样第一次按下后,后续如果X轴没有变化,Y轴的位置就不会再更新了。你需要改成基于当前Y轴的偏移量来计算:

public void begin() {
    // 用getTranslateY()替代getTranslateX(),每次向上移动10像素(数值可按需调整)
    birdView.setTranslateY(birdView.getTranslateY() - 10);
}

2. 节点焦点问题

JavaFX的按键事件需要目标节点(这里是game)获得焦点才能持续响应。如果game没有焦点,可能只会触发一次事件,后续就没反应了。你需要做两件事:

  • 让game节点可以获取焦点:设置setFocusTraversable(true)
  • 在初始化完成后,主动请求焦点:调用game.requestFocus()

另外,建议你在按键事件里判断具体的按键(比如仅响应上方向键),避免所有按键都触发移动逻辑,让代码更精准:

// 初始化时的设置
game.setFocusTraversable(true);
game.requestFocus();

// 修改按键事件监听,仅响应上方向键
game.setOnKeyPressed(e -> {
    if (e.getCode() == KeyCode.UP) {
        begin();
    }
});

把这些修改整合后,你的上方向键应该就能每次按下都让图片向上移动了。

内容的提问来源于stack exchange,提问作者Lee Mung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:18:45