-
我正在为一个类项目制作Pong,我不知道如何使用键盘输入。我在网上看了很多指南,但我做的都不管用。知道为什么它没有注册任何键盘输入吗?我很确定我有所有正确的进口产品。
package pong2; import java.awt.color.*; import javax.swing.JFrame; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.logging.Level; import java.util.logging.Logger; public class graphic extends Canvas implements KeyListener { int y1 = 450; int y2 = 450; public static void main(String[] args) throws InterruptedException {
-
JFrame
JFrame frame = new JFrame("Pong"); Canvas canvas = new graphic(); canvas.setSize(1920,1080); frame.add(canvas); frame.setBackground(Color.BLACK); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.addKeyListener(new KeyListener() ); frame.repaint(); }
-
密钥侦听器
@Override public void keyTyped(KeyEvent e) { //System.out.println("Key Typed"); } @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_DOWN); { //System.out.println("Key Pressed " + e.getKeyCode()); y2 = y2 - 10; repaint(); } if(e.getKeyCode() == KeyEvent.VK_UP); { y2 = y2 + 10; repaint(); } } @Override public void keyReleased(KeyEvent e) { //System.out.println("Key Released"); }
-
乒乓板图形
public void paint(Graphics g) { super.paint(g); //Background g.setColor(Color.BLACK); g.fillRect(0,0,1920,1080); //Goals g.setColor(Color.WHITE); g.fillRect(0,0,50,1080); g.fillRect(1870,0,50,1080); //Paddles g.fillRect(120,y1,20,150); g.fillRect(1790,y2,20,150); //Ball g.fillRect(950,525,20,20); } }
由于graphic
类扩展了Canvas
并实现了KeyListener
,并且Canvas
引用指向graphic
对象i-eCanvas canvas = new graphic();
因此,您必须注册canvas
才能监听键盘输入。
更改frame.addKeyListener(new KeyListener())
至
frame.addKeyListener((KeyListener) canvas);
或
frame.addKeyListener((graphic) canvas);