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

JavaFX按键事件与控制器问题:新窗口无标题、方法无输出

JavaFX新手问题解决指南

问题1:新窗口无标题显示

原因分析

你创建了Scene但未将其关联到Stage(窗口容器),也没有设置窗口标题并触发显示逻辑,导致新窗口无法正常展示标题。

修复代码

修改StartController的buttonTapped方法,添加Stage的创建、标题设置和窗口显示逻辑:

import javafx.stage.Stage; // 记得导入Stage类

@FXML
void buttonTapped(ActionEvent event) {
    FXMLLoader fxmlloader = new FXMLLoader();
    fxmlloader.setLocation(getClass().getResource("/application/playAnonym.fxml"));
    
    try {
        fxmlloader.load();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    Parent root = fxmlloader.getRoot();
    PlayAnonymController controller = fxmlloader.getController();
    Scene scene = new Scene(root);
    
    // 初始化新窗口
    Stage gameStage = new Stage();
    gameStage.setTitle("太空入侵者"); // 设置窗口标题
    gameStage.setScene(scene);
    gameStage.show(); // 显示窗口

    scene.setOnKeyPressed(e -> {
        try {
            controller.movePlayer(e);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    });
}

问题2:movePlayer方法控制台无输出

原因分析

  1. 代码中System.out语句被注释,无法输出日志;
  2. 新窗口的根节点未获得焦点,导致按键事件无法触发;
  3. 玩家移动逻辑存在问题:直接设置translateX为固定值,而非基于当前位置累加/递减。

修复代码

第一步:修改PlayAnonymController的movePlayer方法

取消日志注释,修正移动逻辑:

@FXML
public void movePlayer(KeyEvent event) throws IOException{
    KeyCode key = event.getCode(); 

    switch (event.getCode()) {
        case LEFT:
            PLAYER.setTranslateX(PLAYER.getTranslateX() - 10); // 基于当前位置左移
            System.out.println("左方向键按下,玩家X坐标: " + PLAYER.getTranslateX());
            break;
        case RIGHT:
            PLAYER.setTranslateX(PLAYER.getTranslateX() + 10); // 基于当前位置右移
            System.out.println("右方向键按下,玩家X坐标: " + PLAYER.getTranslateX());
            break;
        default:
            System.out.println("按下未知按键: " + key.getName());
    }
}

第二步:确保窗口获得焦点

在StartController的buttonTapped方法中,窗口显示后让根节点请求焦点:

gameStage.show();
root.requestFocus(); // 让根节点获取焦点,保证按键事件能触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:50:15