Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Обработчик клавиатуры java, как обработать нажатие клавиши в консоли?

#java #клавиатура #консоль


Добрый всем вечер! Передо мной встал такой вопрос, можно ли в обычном консольном
приложении, написанном на java, обработать нажатие клавиши с клавиатуры? Например,
сделать так, чтобы при нажатии кнопки "UP" или "DOWN" какая-нибудь переменная увеличивалась
или уменьшалась на единицу! Это как пример?! Может кто уже сталкивался с подобным,
подскажите, как это реализуется?    


Ответы

Ответ 1



Средствами Java реализовать консольный отлов нажатия функциональных клавиш невозможно. Отловить удастся только клавиши, добавляющие в консоль некоторый символ. Варианты решения: Написать свое AWT/Swing или даже SWT - приложение, имитирующее консоль, но вместо нее содержащее текстовое поле, к которому уже навесить нужные слушатели. Выбрать клавишу (или сочетание клавиш), вводящую в консоль некоторый символ (например, "+" и "-" для переключения переменной). И попробовать убирать этот символ из консоли, дописывать в нее желаемые результаты и т.д (в том, что удастся такое реализовать - сомневаюсь). В обоих случаях нужно не забыть позаботиться о кроссплатформенности приложения, иначе использовать Java для подобных целей вообще не стоит.

Ответ 2



Маловероятно, что это можно сделать средствами Java. Скорее всего придется писать нативный код под нужную платформу и цеплять его через JNI. Можно попробовать работать с curses (ncurses).

Ответ 3



char ch ; int code ; while ( -1 != (code = System.in.read ()) ) { ch = (char) code ; System.out.println ( "you pressed: '" + ch + "'\n" ) ; // выйти когда нажато 'q' if ( 'q' == ch ) { System.exit ( 0 ) ; } }

Ответ 4



http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html - вот тут, в принципе, все есть. public class KeyEventDemo ... implements KeyListener ... { ... /** Handle the key-pressed event*/ public void keyPressed(KeyEvent e) { if (e == KeyEvent.VK_KP_UP ) { //Insert your code here } else if (e == KeyEvent.KEY_LOCATION_LEFT) { //Insert your code here } else if (e == KeyEvent.KEY_LOCATION_RIGHT) { //Insert your code here } } ... } На работоспособность не проверял

Ответ 5



public class AirBallon { private static int x_location=350; static JFrame finalMenu=new JFrame(); public static void start1(){ finalMenu.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) { switch (evt.getKeyCode() ) { case KeyEvent.VK_RIGHT: if(x_location>700) break; right(x_location); x_location++; System.out.println(x_location); break; case KeyEvent.VK_LEFT: if(x_location<0) break; right(x_location) ; x_location--; break; case KeyEvent.VK_UP: up(); break; default: System.out.println(""); break;} private static void right(int k) { labe2.setBounds(k, 450, 100, 150);} }

Комментариев нет:

Отправить комментарий