【问题标题】:Error using keyAdapter and keyEvent in java在 java 中使用 keyAdapter 和 keyEvent 时出错
【发布时间】:2014-08-16 12:41:12
【问题描述】:

我是一名编程初学者,我一直在从事一个小项目,即著名的俄罗斯方块游戏,我遇到了这个小问题,我希望你能帮助我解决问题。我导入了:import java.awt.event.KeyAdapterimport java.awt.event.KeyEvent 能够使用我的键盘玩游戏,但是当我扩展我创建的类以使用这些键时,它显示了一个错误!

代码如下:

addKeyListener(new TAdapter()); 

这里发生的错误是这样说的:

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

class TAdapter extends keyAdapter { // 第二个发生在这里:keyAdapter 不能 //resolved to a type 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;

    }
  }

【问题讨论】:

  • 无论拼写如何:根本不要使用 keyEvent/listeners。相反,通过 actionMap/inputMap 使用 keyBindings

标签: java swing keylistener


【解决方案1】:

你应该避免KeyListeners,他们有很多与焦点相关的问题,他们也会让你的代码膨胀,让管理变得更加困难。

您应该利用 Key Bindings API,它提供了更可重用的 API,并提供了确定组件接收关键事件所需的焦点级别的方法

【讨论】:

    【解决方案2】:

    使用KeyAdapter 代替keyAdapter,使用KeyEvent 代替keyEvent。类名区分大小写。

    class TAdapter extends KeyAdapter 
    

    【讨论】:

    • 我没注意。谢谢
    猜你喜欢
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多