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

Java中不使用Scanner/BufferedReader如何获取直接键盘输入检测方向键

Java方向键检测实现方案

你不想使用Scanner、BufferedReader类的需求完全可以满足,这两类工具本身仅能读取可打印字符输入,本身就无法识别方向键这类功能键的输入,可根据你的使用场景选择对应方案:

1. 桌面GUI程序(Swing/AWT/JavaFX)

这类场景直接绑定键盘事件监听器即可实现检测,是最通用的实现方式:

  • AWT/Swing实现:给交互组件添加KeyListener监听器,通过KeyEvent的keyCode判断按键类型
    代码示例:
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import javax.swing.JFrame;
    
    public class DirectionKeyDetect {
        public static void main(String[] args) {
            JFrame frame = new JFrame("方向键检测");
            frame.setSize(300, 200);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            frame.addKeyListener(new KeyAdapter() {
                @Override
                public void keyPressed(KeyEvent e) {
                    switch (e.getKeyCode()) {
                        case KeyEvent.VK_UP -> System.out.println("按下向上方向键");
                        case KeyEvent.VK_DOWN -> System.out.println("按下向下方向键");
                        case KeyEvent.VK_LEFT -> System.out.println("按下向左方向键");
                        case KeyEvent.VK_RIGHT -> System.out.println("按下向右方向键");
                    }
                }
            });
            
            frame.setVisible(true);
            frame.requestFocus();
        }
    }
    
  • JavaFX实现:给场景绑定onKeyPressed事件,匹配KeyCode枚举值即可
    代码示例:
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import javafx.scene.input.KeyCode;
    
    public class FxDirectionDetect extends Application {
        @Override
        public void start(Stage primaryStage) {
            StackPane root = new StackPane();
            Scene scene = new Scene(root, 300, 200);
            
            scene.setOnKeyPressed(event -> {
                KeyCode code = event.getCode();
                if (code == KeyCode.UP) System.out.println("按下向上方向键");
                else if (code == KeyCode.DOWN) System.out.println("按下向下方向键");
                else if (code == KeyCode.LEFT) System.out.println("按下向左方向键");
                else if (code == KeyCode.RIGHT) System.out.println("按下向右方向键");
            });
            
            primaryStage.setTitle("方向键检测");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    }
    

2. 控制台程序

Java标准库没有原生支持控制台功能键检测的能力,可通过JNI调用系统底层输入API,也可以使用封装好的第三方库JLine3实现,全程不需要用到Scanner或BufferedReader:
代码示例:

import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.jline.utils.NonBlockingReader;

public class ConsoleDirectionDetect {
    public static void main(String[] args) throws Exception {
        try (Terminal terminal = TerminalBuilder.builder().system(true).build()) {
            terminal.enterRawMode();
            NonBlockingReader reader = terminal.reader();
            int input;
            // 按q键退出程序
            while ((input = reader.read()) != 'q') {
                // 方向键的输入序列以ESC(ASCII值27)开头
                if (input == 27) {
                    int seq1 = reader.read();
                    int seq2 = reader.read();
                    if (seq1 == '[') {
                        switch (seq2) {
                            case 'A' -> System.out.println("按下向上方向键");
                            case 'B' -> System.out.println("按下向下方向键");
                            case 'D' -> System.out.println("按下向左方向键");
                            case 'C' -> System.out.println("按下向右方向键");
                        }
                    }
                }
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:45:11