#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);} }
Комментариев нет:
Отправить комментарий