0

大家好,我是 Java 新手,所以我认为这个问题的答案很简单,但我不知道我做错了什么。我在我的 pacman 游戏中添加了一个 keyListener,但不知何故它不起作用。 .我使用了以下代码:

package h04PacMan;

import java.awt.event.*;

import javax.swing.*;

public class PacManBediening extends JPanel implements ActionListener, KeyListener {

private JButton links, rechts, boven, beneden;
PacMan pacman;

public PacManBediening(PacMan pacman) {

    this.pacman = pacman;

    links = new JButton("<");
    links.addActionListener(this);
    add(links);

    rechts = new JButton(">");
    rechts.addActionListener(this);
    add(rechts);

    boven = new JButton("^");
    boven.addActionListener(this);
    add(boven);

    beneden = new JButton("v");
    beneden.addActionListener(this);
    add(beneden);

}

/*
 * bediening bij een klik
 */

@Override
public void actionPerformed(ActionEvent e) {

    if(e.getSource() == links) {

        pacman.setRichtingEnSnelheid( -10 );
        pacman.setBesturing(0);
        pacman.setView(180);
        //System.out.println("links");
    }
    else if(e.getSource() == rechts) {
        pacman.setRichtingEnSnelheid( +10 );
        pacman.setBesturing(0);
        pacman.setView(0);
        //System.out.println("rechts");
    }
    else if(e.getSource() == boven) {
        pacman.setRichtingEnSnelheid( -10);
        pacman.setBesturing(1);
        pacman.setView(90);
        //System.out.println("boven");
    }
    else {
        pacman.setRichtingEnSnelheid( +10);
        pacman.setBesturing(1);
        pacman.setView(270);
        //System.out.println("beneden");
    }


}

@Override
public void keyPressed(KeyEvent e) {

    int key = e.getKeyCode();

    if(key == KeyEvent.VK_LEFT) {
        pacman.setRichtingEnSnelheid( -10 );
        pacman.setBesturing(0);
        pacman.setView(180);
        System.out.println("links");
    }
    else if(key == KeyEvent.VK_RIGHT) {
        pacman.setRichtingEnSnelheid( +10 );
        pacman.setBesturing(0);
        pacman.setView(0);
        System.out.println("rechts");
    }
    else if(key == KeyEvent.VK_UP) {
        pacman.setRichtingEnSnelheid( -10);
        pacman.setBesturing(1);
        pacman.setView(90);
        System.out.println("boven");
    }
    else if(key == KeyEvent.VK_DOWN) {
        pacman.setRichtingEnSnelheid( +10);
        pacman.setBesturing(1);
        pacman.setView(270);
        System.out.println("beneden");
    }

}

@Override
public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

}

有人可以告诉我要添加什么或做些不同的事情吗?

4

2 回答 2

2

您的PacManBediening构造函数中缺少几行。

this.pacman = pacman;
this.setFocusable(true);
this.addKeyListener(this);
于 2012-10-12T14:45:09.913 回答
2
  • KeyListener不是指定的Swing JComponents,我不会这样,

  • 我认为失去Focus焦点是简单且可能的JComponents

  • 用作KeyBindings最可扩展的解决方法,而"catching or hunting for Focus"不是KeyListener

  • forSwing JComponents是所有内部快捷方式、快捷键、内置方法、通知程序,基于KeyBindings

  • 代码示例

于 2012-10-12T15:24:49.273 回答