繁体   English   中英

Java中的KeyListener

[英]KeyListener in Java

大家好,我是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

}

}

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

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

this.pacman = pacman;
this.setFocusable(true);
this.addKeyListener(this);
  • 没有为Swing JComponents指定KeyListener ,我不会这样,

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

  • 使用KeyBindings作为最可替代的解决方法,而不是KeyListener "catching or hunting for Focus"

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

  • 代码示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM