Проверьте, нажата ли клавиша на консоли - PullRequest
0 голосов
/ 22 марта 2020

Я хочу проверить - каким-либо методом или обработчиком событий - нажал ли пользователь клавишу в приложении CLI.

Что-то вроде этого:

if(isWPressed)
    System.out.println("'W' is pressed");
if(isAPressed)
    System.out.println("'A' is pressed");

У меня есть попробовал этот ответ: Как проверить, нажимает ли пользователь клавишу?

Но это не сработало, и, глядя на импорт, я заметил, что он использует awt, так что это бесполезно в CLI, где нет windows, чтобы говорить о. Я также не могу использовать Scanner для этого (как предлагается здесь: Обнаружить нажатие клавиши в консоли ), как если бы пользователь нажимал несколько кнопок - как w и a. Мне нужно знать оба из них нажаты.

1 Ответ

0 голосов
/ 22 марта 2020

Вам нужно использовать keylistener, он позволяет получить ключ

Example 

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication7;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 *
 * @author wilso
 */
public class List implements KeyListener {

    @Override
    public void keyTyped(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void keyPressed(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}

Если вы не хотите использовать awt, тогда вы можете использовать сканер или Event

@Override
public void nativeKeyPressed(NativeKeyEvent e) {
    String temp = NativeKeyEvent.getKeyText(e.getKeyCode());
    if (validHotKeys.contains(temp)) {
        if (!pressedHotKeys.contains(temp)) {
            pressedHotKeys.add(temp);
            System.out.println(pressedHotKeys.toString());
        }
    }
    if (validAlphaKeys.contains(temp)) {
        if (!pressedAlphaKeys.contains(temp)) {
            pressedAlphaKeys.add(temp);
            System.out.println(pressedAlphaKeys.toString());
        }
    }
}
...