Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
KeyListener Java_Java_Swing_Keylistener - Fatal编程技术网

KeyListener Java

KeyListener Java,java,swing,keylistener,Java,Swing,Keylistener,我正在尝试在代码中使用KeyListener。。。。但它不起作用,我想键盘听者没有反应 如果你们有什么不对劲,请告诉我。我不知道为什么它不起作用。 提前谢谢 这是代码 import javax.swing.*; import java.awt.*; import java.util.Scanner; public class Main extends JFrame { static void drawFrame(JFrame frame) { frame.setSiz

我正在尝试在代码中使用KeyListener。。。。但它不起作用,我想键盘听者没有反应

如果你们有什么不对劲,请告诉我。我不知道为什么它不起作用。 提前谢谢

这是代码

import javax.swing.*;
import java.awt.*;
import java.util.Scanner;

public class Main extends JFrame {
    static void drawFrame(JFrame frame) {

        frame.setSize(610, 805);
        frame.setLocation(145, 15);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {

        JFrame frame = new JFrame("PacMan");
        drawFrame(frame);
        MyPanel panel = new MyPanel();
        panel.setBounds(00, 00, 610, 800);
        frame.setLayout(null);
        frame.getContentPane().setLayout(null);
        frame.getContentPane().add(panel);
    }
}
MyPanel类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MyPanel extends JPanel implements KeyListener {

    private int xpac = 285, ypac = 570;

    public MyPanel() {
        this.requestFocus();
        this.requestFocusInWindow();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        drawMap1(g);
        drawPacman(g);
        addKeyListener(this);
    }

    void drawMap1(Graphics g) {

        BufferedImage image = null;
        try {
            image = ImageIO.read(new File("pacmap1.png"));
        } catch (IOException e) {
            System.out.println("Can't find the Image.");
        }
        setBackground(Color.BLACK);
        g.drawImage(image, 0, 0, null);
    }

    void drawPacman(Graphics g) {

        int x = xpac, y = ypac;
        BufferedImage image = null;
        try {
            image = ImageIO.read(new File("pacright.png"));
        } catch (IOException e) {
            System.out.println("Can't find the Image.");
        }
        g.drawImage(image, x, y, null);
    }

    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println("Hi there Buddy");

    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println("Hi there Buddy");

    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println("Hi there Buddy");
    }

}

你应该把
this.addKeyListener(this)放进去在MyPanel类构造函数中,而不是在paintComponent方法中。

您应该将
放入this.addKeyListener(this),而不是paintComponent方法。

对于此类任务,请始终使用
键绑定。见:


作为一个小提示,我建议您将
KeyListener
实现为
AnonymousClass

请始终使用
KeyBindings
执行此类任务。见:


作为一个小提示,我建议您将
KeyListener
实现为一个
AnonymousClass
,您只需在
MyPanel
类中注释掉
addKeyListener
,并在实例化
MyPanel
后在主类中执行此操作:

frame.addKeyListener(panel);

您应该在
MyPanel
类中注释掉
addKeyListener
,并在实例化
MyPanel
后在主类中执行此操作:

frame.addKeyListener(panel);