在java中使用keyAdapter和keyEvent时出错

时间:2014-06-25 19:51:32

标签: java swing keylistener

我是编程的初学者,我一直致力于一个小项目,一个名为俄罗斯方块的着名游戏,我遇到了这个小问题,我希望你能帮我解决问题。我导入了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;

    }
  }

2 个答案:

答案 0 :(得分:2)

你应该避免使用KeyListener,它们有许多与焦点相关的问题,它们也会使代码膨胀并使管理变得更加困难。

您应该利用Key Bindings API来提供更可重复使用的API,并提供确定组件获取关键事件所需的关注级别的方法

答案 1 :(得分:0)

使用KeyAdapter代替keyAdapterKeyEvent代替keyEvent。类名区分大小写。

class TAdapter extends KeyAdapter