Pla*_*aix 3 java swing paint keylistener jframe
我正在写一点点像蛇的游戏,我正在执行的关键事件监听器,所以它监听当按下方向键它递增或递减的框架椭圆的位置.以下是我的代码,您认为发生了什么?我试着谷歌搜索可能的解决方案,但我结果是空的.
package snakegame;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
/**
*
* @author PlaixHax0r
*/
public class SnakeGame extends JFrame{
int x, y;
public class ActionListener extends KeyAdapter{
public void KeyPressed(KeyEvent a){
int KeyCode = a.getKeyCode();
if(KeyCode == KeyEvent.VK_RIGHT){
x++;
}
if(KeyCode == KeyEvent.VK_LEFT){
x--;
}
if(KeyCode == KeyEvent.VK_DOWN){
y++;
}
if(KeyCode == KeyEvent.VK_UP){
y--;
}
}
public void KeyReleased(KeyEvent a){
}
}
public SnakeGame(){
addKeyListener(new ActionListener());
setTitle("Snake 1.0");
setVisible(true);
setSize(500, 500);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
x=150;
y=150;
}
public void paint(Graphics g){
g.drawString("Welcome to Snake Empire", 180, 50);
g.fillOval(x, y, 15, 15);
repaint();
}
public static void main(String[] args) {
new SnakeGame();
}
}
Run Code Online (Sandbox Code Playgroud)
Hov*_*els 11
几条建议:
paintComponent(...)方法覆盖中绘制.paintComponent(...)通常是调用super的方法:super.paintComponent(g)repaint()在里面打电话paint(...)或paintComponent(...).这是尝试不受控制的动画的不好方法.请查看Key Bindings Tutorial,然后查看我在此处和此处使用Key Bindings的示例代码.
我看到的问题除了气垫船看到的问题外:
你没有覆盖任何KeyListener(或KeyAdapter)方法.您的方法已命名KeyPressed,方法始终以Java中的小写字母开头.该方法被命名keyPressed().当您打算覆盖方法时,始终使用@Override注释.这样,当你没有因为你的方法名称中有拼写错误时,你会收到编译错误:
@Override
public void keyPressed(KeyEvent event) {
...
}
Run Code Online (Sandbox Code Playgroud)当按下某个键时你没有调用repaint(),所以Swing没有理由重新绘制你的帧.