#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. Я не обратил внимания . Спасибо