Java中的KeyListener
大家好,我是Java新手,所以我认为这个问题的答案很简单,但我不知道我做错了什么。。我在我的pacman游戏中添加了一个keyListener,但不知何故它不起作用。。我使用了以下代码:Java中的KeyListener,java,swing,keylistener,Java,Swing,Keylistener,大家好,我是Java新手,所以我认为这个问题的答案很简单,但我不知道我做错了什么。。我在我的pacman游戏中添加了一个keyListener,但不知何故它不起作用。。我使用了以下代码: package h04PacMan; import java.awt.event.*; import javax.swing.*; public class PacManBediening extends JPanel implements ActionListener, KeyListener { p
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
}
}
包装h04PacMan;
导入java.awt.event.*;
导入javax.swing.*;
公共类pacmanbedien扩展JPanel实现ActionListener、KeyListener{
私人JButton链接,rechts,boven,beneden;
吃豆人吃豆人;
公共吃豆人(吃豆人吃豆人){
this.pacman=pacman;
链接=新的JButton(“”);
rechts.addActionListener(此);
添加(记录);
boven=新的JButton(“^”);
boven.addActionListener(此);
添加(boven);
beneden=新的JButton(“v”);
addActionListener(这个);
添加(beneden);
}
/*
*贝迪宁·比吉恩·克里克
*/
@凌驾
已执行的公共无效操作(操作事件e){
如果(例如getSource()==链接){
pacman.setRichtingEnSnelheid(-10);
pacman.挫折感(0);
pacman.setView(180);
//System.out.println(“链接”);
}
else if(e.getSource()==rechts){
pacman.setRichtingEnSnelheid(+10);
pacman.挫折感(0);
pacman.setView(0);
//System.out.println(“rechts”);
}
else if(例如getSource()==boven){
pacman.setRichtingEnSnelheid(-10);
pacman.挫折测试(1);
pacman.setView(90);
//System.out.println(“boven”);
}
否则{
pacman.setRichtingEnSnelheid(+10);
pacman.挫折测试(1);
pacman.setView(270);
//System.out.println(“beneden”);
}
}
@凌驾
按下公共无效键(按键事件e){
int key=e.getKeyCode();
if(key==KeyEvent.VK_左){
pacman.setRichtingEnSnelheid(-10);
pacman.挫折感(0);
pacman.setView(180);
System.out.println(“链接”);
}
else if(key==KeyEvent.VK_RIGHT){
pacman.setRichtingEnSnelheid(+10);
pacman.挫折感(0);
pacman.setView(0);
System.out.println(“rechts”);
}
else if(key==KeyEvent.VK_UP){
pacman.setRichtingEnSnelheid(-10);
pacman.挫折测试(1);
pacman.setView(90);
System.out.println(“boven”);
}
else if(key==KeyEvent.VK_DOWN){
pacman.setRichtingEnSnelheid(+10);
pacman.挫折测试(1);
pacman.setView(270);
System.out.println(“beneden”);
}
}
@凌驾
公共无效密钥已释放(KeyEvent arg0){
//TODO自动生成的方法存根
}
@凌驾
public void keyTyped(KeyEvent arg0){
//TODO自动生成的方法存根
}
}
有人能告诉我要添加什么或做什么不同的事情吗?您的
pacmanbedien
构造函数缺少几行
this.pacman = pacman;
this.setFocusable(true);
this.addKeyListener(this);
您的
pacmanbedien
构造函数中缺少几行
this.pacman = pacman;
this.setFocusable(true);
this.addKeyListener(this);
不是为KeyListener
指定的,我不会这样做Swing JComponents
- 我认为从可聚焦的
JComponents
- 使用
作为最具可伸缩性的解决方法,而不是KeyBindings
键侦听器的
捕获或搜索焦点“
- 对于
而言,它们都是基于Swing JC组件
KeyBindings的内部捷径、快捷键、内置方法、通知程序
不是为KeyListener
指定的,我不会这样做Swing JComponents
- 我认为从可聚焦的
JComponents
- 使用
作为最具可伸缩性的解决方法,而不是KeyBindings
键侦听器的
捕获或搜索焦点“
- 对于
而言,它们都是基于Swing JC组件
KeyBindings的内部捷径、快捷键、内置方法、通知程序
有人能告诉我添加什么或做什么不同吗?
啊,我明白了!:)我会尝试重新设计我的代码以使用键绑定,但不能保证它会起作用!正如我提到的,我是Java新手,所以我只是通过创建这个pacman游戏来尝试一下。我遇到了KeyListener的问题,我查看了代码示例,但我还不能理解代码中的所有内容,因此我不知道它的作用或相关部分是什么(@Reshad与您没有任何问题,我个人也没有问题,我的回答是--->有人能告诉我添加什么或做什么不同吗?
啊,我明白了!:)我会尝试重新设计我的代码以使用键绑定,但不能保证它会起作用!