Java 我的密钥侦听器有什么问题?它根本不会进入按键状态 公共类扩展JPanel { int x=0; int y=0; int-previousX=x; int先前y=y; 公共迷宫() { 挫折地面(颜色:白色); addKeyListener(新的ArrowListener()); setPreferredSize(新尺寸(200200)); 设置聚焦(真); requestFocusInWindow(); } 公共组件(图形页) { super.paintComponent(第页); page.setColor(Color.WHITE); 第.fillRect页(上一页,上一页,第10页,第10页); 页面设置颜色(颜色为洋红色); 第3页:fillRect(x,y,10,10); } 私有类ArrowListener实现KeyListener { 按下公共无效键(KeyEvent事件) { 系统输出打印项次(“按下”); previousX=x; 前y=y; 开关(event.getKeyCode()) { case KeyEvent.VK_W: 如果(y>=0) y--; System.out.println(“up”); 打破 case KeyEvent.VK_S: 如果(y=0) x--; 系统输出打印项次(“左”); 打破 case KeyEvent.VK_D: if(x)

Java 我的密钥侦听器有什么问题?它根本不会进入按键状态 公共类扩展JPanel { int x=0; int y=0; int-previousX=x; int先前y=y; 公共迷宫() { 挫折地面(颜色:白色); addKeyListener(新的ArrowListener()); setPreferredSize(新尺寸(200200)); 设置聚焦(真); requestFocusInWindow(); } 公共组件(图形页) { super.paintComponent(第页); page.setColor(Color.WHITE); 第.fillRect页(上一页,上一页,第10页,第10页); 页面设置颜色(颜色为洋红色); 第3页:fillRect(x,y,10,10); } 私有类ArrowListener实现KeyListener { 按下公共无效键(KeyEvent事件) { 系统输出打印项次(“按下”); previousX=x; 前y=y; 开关(event.getKeyCode()) { case KeyEvent.VK_W: 如果(y>=0) y--; System.out.println(“up”); 打破 case KeyEvent.VK_S: 如果(y=0) x--; 系统输出打印项次(“左”); 打破 case KeyEvent.VK_D: if(x),java,swing,keylistener,keyevent,Java,Swing,Keylistener,Keyevent,我很快编写了这个主类,并测试了您的代码。它对我很有用 我很快编写了这个主类并测试了您的代码。它对我很有用。您正在查看java控制台吗?它对我很有用。编辑您的问题并显示您编写的代码,它将迷宫添加到窗口或小程序中。可能有其他东西窃取了焦点,可能是JButton或文本组件,如JTextField。这就是其中之一尝试避免使用键侦听器而改为使用键绑定的原因。尝试以下操作:如果您花费几分钟时间搜索“键侦听器不工作”,您会发现,在大多数情况下,这是一个与焦点相关的问题,最常用的解决方法是使用。从您得到的回答中

我很快编写了这个主类,并测试了您的代码。它对我很有用


我很快编写了这个主类并测试了您的代码。它对我很有用。

您正在查看java控制台吗?它对我很有用。编辑您的问题并显示您编写的代码,它将
迷宫
添加到窗口或小程序中。可能有其他东西窃取了焦点,可能是JButton或文本组件,如JTextField。这就是其中之一尝试避免使用键侦听器而改为使用键绑定的原因。尝试以下操作:如果您花费几分钟时间搜索“键侦听器不工作”,您会发现,在大多数情况下,这是一个与焦点相关的问题,最常用的解决方法是使用。从您得到的回答中可以看出,它也可能是一些随机的问题。您在java控制台上查看的是什么?它对我有用。编辑您的问题并显示您编写的代码,它将
迷宫添加到窗口或ap中请注意,可能有其他东西正在窃取焦点,可能是JButton或文本组件,如JTextField。这是尝试避免使用KeyListener而改为使用键绑定的原因之一。请尝试以下方法:如果您花费几分钟时间搜索“Key listener不起作用”,您会发现,在大多数情况下,这是一个与焦点相关的问题,最常用的解决方法是使用。从您得到的响应中可以看出,它也可能是一些随机时间的问题setSize()和pack()相互排斥。只需要一个或另一个。setSize()和pack()相互排斥。只需要一个或另一个。
public class Maze extends JPanel
{

    int x = 0;
    int y = 0;
    int previousX = x;
    int previousY = y;

    public Maze()
    {
        setBackground(Color.WHITE);

        addKeyListener(new ArrowListener());
        setPreferredSize(new Dimension(200, 200));
        setFocusable(true);
        requestFocusInWindow();
    }

    public void paintComponent(Graphics page)
    {
        super.paintComponent(page);
        page.setColor(Color.WHITE);
        page.fillRect(previousX, previousY, 10, 10);
        page.setColor(Color.magenta);
        page.fillRect(x, y, 10, 10);

    }

    private class ArrowListener implements KeyListener
    {

        public void keyPressed(KeyEvent event)
        {
            System.out.println("pressed");
            previousX = x;
            previousY = y;

            switch(event.getKeyCode())
            {

            case KeyEvent.VK_W:
                if(y >= 0)
                    y--;
                System.out.println("up");
                break;

            case KeyEvent.VK_S:
                if(y <= 100)
                    y++;
                System.out.println("Down");
                break;

            case KeyEvent.VK_A:
                if(x >= 0)
                    x--;
                System.out.println("Left");
                break;

            case KeyEvent.VK_D:
                if(x <= 100)
                    x++;
                System.out.println("Right");


            }
            repaint();
        }

        public void keyReleased(KeyEvent event){}

        public void keyTyped(KeyEvent event){}

    }
}
import javax.swing.JFrame;

public class Main {

    static Maze m = new Maze();
    static JFrame frame = new JFrame();

    public static void main(String[] args) {
        frame.setSize(300, 300);
        frame.add(m);
        frame.pack();
        frame.setVisible(true);
    }

}