Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的KeyListener_Java_Swing_Keylistener - Fatal编程技术网

Java中的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

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

}

}
包装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的内部捷径、快捷键、内置方法、通知程序


      如果我使用箭头控件,什么都不会发生,我也看不到system.out.prinln我在控件下写了,所以整个方法没有被调用,我想我只能猜测。您需要向具有焦点的组件添加一个键侦听器,否则事件将不会触发。如果我使用箭头控件,则不会发生任何事情,也看不到system.out.prinln我在控件下编写,因此整个方法不会被调用,我想我只能猜测。您需要向具有焦点的组件添加一个键侦听器,否则事件将不会触发。非常感谢,我错过了这些行!非常感谢,这是我错过的台词!正如我提到的,我是Java新手,所以我只是通过创建这个pacman游戏来尝试一下。我遇到了KeyListener的问题,我查看了代码示例,但我还不能理解代码中的所有内容,因此我不知道它的作用或相关部分是什么(@Reshad与您没有任何问题,我个人也没有问题,我的回答是--->
      有人能告诉我添加什么或做什么不同吗?
      啊,我明白了!:)我会尝试重新设计我的代码以使用键绑定,但不能保证它会起作用!正如我提到的,我是Java新手,所以我只是通过创建这个pacman游戏来尝试一下。我遇到了KeyListener的问题,我查看了代码示例,但我还不能理解代码中的所有内容,因此我不知道它的作用或相关部分是什么(@Reshad与您没有任何问题,我个人也没有问题,我的回答是--->
      有人能告诉我添加什么或做什么不同吗?
      啊,我明白了!:)我会尝试重新设计我的代码以使用键绑定,但不能保证它会起作用!