Я не могу заставить работать прослушиватель KeyEvent

Хорошо, сначала. Если я делаю System.out.println(e); это печатает, когда я нажимаю клавишу. Однако я не могу понять, как сохранить это в int. Моя IDE не выдает ошибок, если я делаю int press = e.KEY_PRESSED(); или int press = e.getKeyCode(); но если я попытаюсь напечатать, ничего не произойдет.

Я пытался заставить это работать часами, и обработчики KeyEvent в Google и Javadocs, кажется, мало помогают мне в этом.

public void keyPressed(KeyEvent e) {
    pressed = e.getKeyCode();
    System.out.println(pressed);

}

    do{
        time = System.currentTimeMillis();
        do{
            if(pressed == 37||pressed==38||pressed==39||pressed==40){
                lastvalid=pressed;
            }
        }
        while(System.currentTimeMillis() < time + speed);

        switch(lastvalid){
            case 37: catarloc.set(0, (Integer)catarloc.get(0)-1); break;
            case 38: catarloc.set(1, (Integer)catarloc.get(1)-1); break;
            case 39: catarloc.set(0, (Integer)catarloc.get(0)+1); break;
            case 40: catarloc.set(1, (Integer)catarloc.get(1)+1); break;
        }

        if(Math.random() > .95 || apples < 1){
            applearray[(int)(Math.random()*100/2.8)][(int)(Math.random()*100/4)] = true;
            apples++;
        }
        score+=catarloc.size()-1;
        label.setText("Score     "+ score);
        mainWindow.repaint();
    }
    while(win == false || lose == false);

person Community    schedule 06.10.2010    source источник
comment
Какую библиотеку вы используете (Swing/SWT/etc)?   -  person Stan Kurilin    schedule 06.10.2010
comment
Можете ли вы включить источник для вашего слушателя и использование ключевого события?   -  person Andy    schedule 06.10.2010
comment
Готово, включая те части, которые используют ввод   -  person    schedule 06.10.2010
comment
На какой компонент вы устанавливаете KeyListener? Может дело в фокусе? Итак, если вы нажмете на элемент управления с KeyListener, а затем нажмете клавишу, получит ли он событие?   -  person Andy    schedule 06.10.2010


Ответы (2)


Как насчет keyEvent.getKeyCode() ? Он возвращает целое число. KEY_PRESSED является статическим конечным целочисленным членом KeyEvent и представляет событие при нажатии клавиши, а не фактический код клавиши.

Обновление: (Упс) я вижу, что вы уже пробовали getKeyCode. Что произойдет, если вы напечатаете getKeyLocation или getKeyChar?

person Andy    schedule 06.10.2010
comment
Очевидно, это странная вещь. Я пытался заставить работать клавиши со стрелками, и если я попробую сначала, ввод с клавиатуры не будет обнаружен. Я должен попробовать обычный ключ перед теми, которые я пробовал. - person ; 06.10.2010

В зависимости от типа мероприятия:

  • keyEvent.getKeyChar() дает вам символ, связанный с ключом, но только для KEY_TYPED событий. В противном случае он возвращает CHAR_UNDEFINED
  • keyEvent.getKeyCode() дает вам код виртуального ключа, но только для событий KEY_PRESSED и KEY_RELEASED. В противном случае возвращается VK_UNDEFINED.
person Grodriguez    schedule 06.10.2010