Ошибка при использовании keyAdapter и KeyEvent в java

#java #swing #keylistener

#java #swing #keylistener

Вопрос:

Я новичок в программировании, и я работал над небольшим проектом, известной игрой под названием Tetris, и я столкнулся с этой небольшой проблемой, и я хотел бы, чтобы вы помогли мне с решением. Я импортировал: import java.awt.event.KeyAdapter и import java.awt.event.KeyEvent , чтобы иметь возможность использовать свою клавиатуру для игры, но когда я расширяю класс, который я создал, для использования клавиш, он показывает мне ошибку!!

Вот код:

 addKeyListener(new TAdapter()); 
  

Здесь возникает ошибка, в которой говорится следующее:

 The method addKeyListener(keyListener) in the type Component is not applicable for the arguments(Board.TAdapter)
  

класс TAdapter расширяет keyAdapter { // Второе происходит здесь: keyAdapter не может быть // преобразован в тип
public void keyPressed(KeyEvent e) { // Третье происходит здесь: KeyEvent // не может быть преобразован в тип

         if (!isStarted || curPiece.getShape() == Tetrominoes.NoShape) {
            return;

        }

        int keycode = e.getKeyCode();

        if (keycode == 'p' || keycode == 'P') {
            pause();
            return;

        }
        if (isPaused)
        {return;}

    switch (keycode) {
        case KeyEvent.VK_LEFT:
            tryMove(curPiece, curX - 1, curY);
            break;
        case KeyEvent.VK_RIGHT:
            tryMove(curPiece, curX   1, curY);
            break;
        case KeyEvent.VK_DOWN:
            tryMove(curPiece.rotateRight(), curX, curY);
            break;
        case KeyEvent.VK_UP:
            tryMove(curPiece.rotateLeft(), curX, curY);
            break;
        case KeyEvent.VK_SPACE:
            dropDown();
            break;
        case 'd': 
            oneLineDown();
            break;
        case 'D':
            oneLineDown();
            break;

    }
  }
  

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

1. независимо от написания: вообще не используйте KeyEvent / listeners. Вместо этого используйте привязки клавиш через ActionMap / InputMap

Ответ №1:

Вам следует избегать KeyListener s, у них есть ряд проблем, связанных с фокусом, они также могут раздуть ваш код и усложнить управление.

Вместо этого вы должны воспользоваться преимуществами API привязок ключей, которые предоставляют более многоразовый API и предоставляют средства для определения уровня фокусировки, необходимого компоненту для получения ключевых событий

Ответ №2:

Используйте KeyAdapter вместо keyAdapter , и KeyEvent вместо keyEvent . Имена классов чувствительны к регистру.

 class TAdapter extends KeyAdapter 
  

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

1. Я не обратил внимания . Спасибо