2016-03-07 2 views
3

Я пишу приложение Java, которое использует как Scanner, так и Console, чтобы получить входные данные от пользователя. Я хотел бы добавить поддержку истории команд, чтобы пользователь мог использовать КНОПКИ СО СТРЕЛКАМИ для поиска предыдущих входов (аналогично терминалу). Есть ли способ сделать это? Прямо сейчас, когда я использую либо Scanner, либо Console, я получаю странные символы, такие как ^[[A при нажатии клавиш со стрелками.Признать клавиши со стрелками в приложении сканера или консоли Java

Я прочитал о KeyListener и KeyEvent, но мое приложение не использует графический интерфейс.

Спасибо!

+0

Не можете вы по-прежнему использовать ключ слушателя слушать ключевых событий инсульта, а затем использовать символ возврата каретки, чтобы перезаписать выходы, такие как '^ [[Ā' и вывести команду из истории? – Pubudu

+0

Но «KeyListener» работает только с графическими приложениями. Я не разрабатываю приложение для графического интерфейса. –

+0

Посмотрите, полезно ли это. Http://stackoverflow.com/questions/4005574/java-key-listener-in-commandline – Pubudu

ответ

1

Хороший вопрос - + 1'd. В Windows я бы установил SetConsoleMode, чтобы изменить консоль, чтобы получить исходный ввод, но на * Nix похоже, что есть больше работы. К сожалению, у меня нет кода, который я могу показать вам прямо сейчас, но посмотрите на эту ссылку и посмотрите, помогает ли она.

http://www.darkcoding.net/software/non-blocking-console-io-is-not-possible/

+0

Спасибо за ссылку! Это было очень полезно. Jline - это путь. –

0

На самом деле вам понадобится KeyListener, но он работает только с графическим интерфейсом.

Вот как с KeyListener:

public void keyPressed(KeyEvent k) { 
    if (k.getKeyCode() == KeyEvent.VK_UP) {...}   
    else if (k.getKeyCode() == KeyEvent.VK_DOWN) {...} 
    else if (k.getKeyCode() == KeyEvent.VK_LEFT) {...} 
    else if (k.getKeyCode() == KeyEvent.VK_RIGHT) {...} 
} 

Все ключи как VK_UP предопределены. Я предлагаю вам создать свернутое окно, которое сканирует входы клавиатуры во время работы вместе с консолью.

+0

Что вы подразумеваете под минимальным окном? –

+0

* Свернуть. Чтобы скрыть окно на панели задач или в лотке, пользователь не будет взаимодействовать с ним. –

Смежные вопросы