KeyListener 在 Java 次摆动中没有响应?
KeyListener not responding in Java swings?
我正在尝试制作一些简单的游戏,当我向上或向下按键时我想移动我的矩形,但问题是 keylistener 不工作..
我已经为名为 "classKeyEvents" 的密钥侦听器事件单独设置了 class 是这导致了问题还是我将密钥侦听器添加到容器的方式导致了问题
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
相反。
我正在尝试制作一些简单的游戏,当我向上或向下按键时我想移动我的矩形,但问题是 keylistener 不工作..
我已经为名为 "classKeyEvents" 的密钥侦听器事件单独设置了 class 是这导致了问题还是我将密钥侦听器添加到容器的方式导致了问题
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
相反。