2017-11-21 17 views
5

저는 콘솔 창에서 기본 화살표 키 움직임을 구현하는 방법을 찾으려고 애 쓰고 있습니다. switch 문과 변수를 사용하는 C# 스크립트를 보았습니다.하지만 선생님은 Java 사용을 강조합니다.Java를 사용하여 콘솔 창에서 기본 화살표 키 이동을 구현하는 방법은 무엇입니까?

일부 다른 스레드에서 JNA 및/또는 Jline과 같은 확실한 (잘못된 경우 if correct) "프레임 워크"를 설치하지 않으면 Java에서 가능하지 않다고 대답 한 것 같지만 초보자에게는 무엇을 알지 못합니다. 그러한 것들은 심지어 의미합니다.

지금 당신이 내 선생님이 우리가 할 수있는 생각에 바보라고하기 전에, 그는 그것을 할 화살표 키 움직임을 가지고 말한 적, 난 그냥 멋진 :)

+2

나는 이것이 잠시 동안 궁금해했지만 연구에 신경을 쓰지 않았기 때문에 내가 상향 투표했다. 나는 왜 다른 사람들이 이것을 왜곡 할지도 모르지만 (시도가 없다), 흥미 롭고 프로그래밍과 관련이 있으며, OP가 약간의 연구를했다는 것을 보여준다. – byxor

+0

는 C#에서 사용 된 것과 동일한 메커니즘을 사용하여 awt에서 KeyEvent를 사용합니다. 감지 된 KeyEvent에 대해 스위치를 켜십시오. 더 많은 설명이 필요하면 알려주세요. 답을 추가하겠습니다. –

답변

3

이 더 어려운 줄 알았는데 Java가 플랫폼에서 작동하는 방식 때문에 주로 나타납니다. , 두 개의 문제가 이제

InputStream in = System.in; 

    int next = 0; 
    do { 
     next = in.read(); 
     System.out.println("Got " + next); 
    } while (next != -1); 

: 키보드에서 읽을 수있는 기본 솔루션은 표준 입력 사용과 같이하는 것입니다 그대로이 다음 문자를 인쇄되지 않습니다 유닉스 플랫폼에서

  1. 눌려져 있지만 반환이 눌러 진 후에 만 ​​운영 체제가 기본적으로 입력을 버퍼링하기 때문에
  2. 화살표 키에는 아스키 코드가 없으므로 사용 된 터미널 에뮬레이터에 따라 이른바 이스케이프 시퀀스가 ​​있으므로 내 Mac에서 위의 코드를 실행하고 Arrow-Up을 누른 다음 반환 키를 누르면 다음과 같은 출력 : 당신은 유닉스 플랫폼을 표적으로하는 경우

    Got 27 // escape 
    Got 91 
    Got 65 
    Got 10 // newline 
    

이 주위에 좋은 플랫폼 독립적 인 방법은 없습니다, javacurses은 도움이 될 수 있습니다.