java - KeyListener 在 Java swing 中没有响应?

标签 java swing event-handling jpanel keylistener

我正在尝试制作一些简单的游戏,当我按下向上键或向下键时我想移动我的矩形,但问题是按键监听器不起作用..

我为名为“classKeyEvents”的按键监听器事件创建了单独的类,这是导致问题的原因还是我将按键监听器添加到容器的方式导致了问题

My Code

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Pong extends JPanel
{
    static public JFrame frame = null;
    Container con  = null;

    public static int paddleX = 10, paddleY = 270, paddleWidth = 10, paddleHeight = 80;
    public static int upSpeed = 5;
    public static int downSpeed = 5;


    public void creatWindow()
    {
        frame = new JFrame();
        con = frame.getContentPane();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(200,50,900,600);
        frame.setVisible(true);

        con.add(this);
        con.setFocusable(true);
        con.addKeyListener(new classKeyEvents());

        Runnable ml = new mainLoop();
        Thread th = new Thread(ml);
        th.start();

    }


    protected void paintComponent(Graphics g)
    {
      super.paintComponent(g);
      g.setColor(Color.darkGray);
      g.fillRect(0, 0, getWidth(), getHeight());

      g.setColor(Color.YELLOW);
      g.drawRect(paddleX, paddleY, paddleWidth, paddleHeight);
      g.fillRect(paddleX, paddleY, paddleWidth, paddleHeight);
      System.out.println("-----");

    }

    class classKeyEvents  implements KeyListener
    {

        public void keyTyped(KeyEvent e) { }

        public void keyPressed(KeyEvent e)
        {
           if(e.getKeyCode() == KeyEvent.VK_KP_UP)
           {

               System.out.println("...");
               Pong.paddleY -= Pong.upSpeed;
               Pong.frame.repaint();
           }

           else if(e.getKeyCode() == KeyEvent.VK_KP_DOWN)
           {
               System.out.println("...");
               Pong.paddleY += Pong.downSpeed;
               Pong.frame.repaint();
           }
        }

        public void keyReleased(KeyEvent e)
        {

        }

    }

    class mainLoop implements Runnable
    {
        public void run() 
        {
            while(true)
            {

                try 
                {
                    Thread.sleep(100);
                }
                catch (InterruptedException ex) 
                {
                    Logger.getLogger(Pong.class.getName()).log(Level.SEVERE, null, ex);
                }

            }

        }

    }

    public static void main(String[] args) 
    {
      Pong p = new Pong();              
      p.creatWindow();

    }

}

请有人帮我找到这个问题的解决方案,这对我有很大帮助

最佳答案

我想我找到了可能导致您出现问题的原因。

KeyEvent.VK_KP_UP 

是键盘上的按键事件,因此是“KP”。

使用

KeyEvent.VK_UP / KeyEvent.VK_DOWN

相反。

关于java - KeyListener 在 Java swing 中没有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62465360/

相关文章:

java - 消失的GUI java

java - Proguard 找不到引用的类 com.google.ads.internal.state.AdState

java - 为什么 java.io.Serializable 在 Java 5 中没有被弃用?

Java GUI 错误 - 类型不匹配 : cannot convert from String to double

java - 如何使用 Swing 减少打开文件的加载时间?

javascript - 设置鼠标单击事件 JavaScript 的顺序

java - 为什么 @ManyToMany 不能使用非主键列?

java - 使用箭头键浏览 JButton

javascript - Brightcove 播放器 onTemplateReady 未触发

java - 让所有 Kubernetes Pod 监听同一个 Kafka 主题