Как захватить ввод с клавиатуры в моем JWindow, используя Java? - PullRequest
1 голос
/ 09 ноября 2011

Когда я нажимаю клавиатуру с F1 до 12 или от 0 до 9 или от A до Z (все кнопки).Я не вижу его захвата ввода с клавиатуры.Как мне это исправить?

public class Boot extends JWindow implements KeyListener
{
  public Boot() 
  {
    .....
    this.addKeyListener(this);
    ....
  }

  public void keyTyped(KeyEvent ke) 
  {
    System.out.println( ke.getKeyChar());
  }

  public void keyPressed(KeyEvent ke) 
  {
    System.out.println( ke.getKeyChar());

    /* KEY EVENTS */
    // KeyEvent.KEY_TYPED
    // KeyEvent.KEY_PRESSED
    // int id = id.getId();

  }

  public void keyReleased(KeyEvent ke) 
  {
    System.out.println( ke.getKeyChar());
  }

}

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

KeyEvents передаются только компонентам, которые являются фокусируемыми.

Прочитайте API для конструктора JWindow ().В нем говорится:

Создает окно без указанного владельца.Это окно не будет фокусируемым.

Прочитайте API для конструктора JWindow (Frame).В нем говорится:

Создает окно с указанным фреймом владельца.Если владелец имеет значение null, будет использоваться общий владелец, и это окно не будет фокусироваться.Кроме того, это окно не будет фокусируемым, если его владелец не будет отображаться на экране.

Поэтому в основном вам также необходимо создать видимый JFrame при использовании JWindow.

JFrame frame = new JFrame();
frame.setVisible( true );
JWindow window = new JWindow(frame);

Хак, который я видел на форумах, должен использовать:

JWindow window = new JWindow(new JFrame("is Showing")
{
   public boolean isShowing()
   {
     return true;
   }
});

Или лучше использовать недокрашенный JFrame, и вам не нужно об этом беспокоиться.

0 голосов
/ 09 ноября 2011

[Java API KeyEvent]

Метод getKeyChar всегда возвращает действительный символ Unicode или CHAR_UNDEFINED. Ввод символов описывается событиями KEY_TYPED: события KEY_PRESSED и KEY_RELEASED не обязательно связаны с вводом символов. Следовательно, результат метода getKeyChar гарантированно будет значимым только для событий KEY_TYPED.

Для событий нажатия клавиши и отпускания клавиши метод getKeyCode возвращает ключ события keyCode. Для событий с типом ключа метод getKeyCode всегда возвращает VK_UNDEFINED.

Использовать getKeyCode для разблокированного ключа. KeyEvent.F1, F2, ... могут использоваться для функциональных клавиш.

...