qq_32354435 2015-10-27 09:47 采纳率: 0%
浏览 1679

让小球受键盘控制移动,我的程序哪里出错了小球不动

java新手一只。这是我的原程序,java新手一只,求大神解惑

import java.awt.*;

import javax.swing.*;

import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**坦克大战0.4
*@author 安晔
*代码重构
*定义常量
*/

public class TankClient extends JFrame{
public static final int WIDTH = 800;
public static final int HEIGHT = 600;

/*主函数*/
public static void main(String []args){
    JFrame frm=new JFrame("坦克大战0.4");
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frm.setLayout(null);
    Tank tank=new Tank();
    tank.setBounds(0, 0, WIDTH,HEIGHT);
    tank.setBackground(Color.GREEN);
    frm.getContentPane().add(tank);
    frm.setBounds(300, 400, WIDTH,HEIGHT);
    frm.setResizable(false);
    frm.setVisible(true);

}

}

class Tank extends JPanel implements Runnable{
/*定义圆的坐标*/
KeyMonitor k=new KeyMonitor();
public int x=50,y=50;
Thread runner;
/*定义默认构造函数*/
Tank(){
start();
}

public void paint(Graphics g){
    super.paint(g);//刷新屏幕,重绘图像
    g.setColor(Color.RED);
    g.fillOval(x, y, 30, 30);
}
public void start(){
    if(runner==null)
        runner=new Thread(this);
    runner.start();
}
public void run(){
    while(true){
        this.addKeyListener(new KeyMonitor());
        repaint();
        try{
            Thread.sleep(100);
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}

/*双缓存技术解决闪速效果*/
 Image offScreenImage = null;
 public void update(Graphics g) {
        if(offScreenImage == null) {
            offScreenImage = this.createImage(800, 600);
        }
        Graphics gOffScreen = offScreenImage.getGraphics();
        Color c = gOffScreen.getColor();
        gOffScreen.setColor(Color.GREEN);
        gOffScreen.fillRect(0, 0, 800, 600);
        gOffScreen.setColor(c);
        paint(gOffScreen);
        g.drawImage(offScreenImage, 0, 0, null);
    }

 /*定义键盘监听器*/
 private class KeyMonitor extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();
            switch(key) {
            case KeyEvent.VK_LEFT :
                x -= 5;
                break;
            case KeyEvent.VK_UP :
                y -= 5;
                break;
            case KeyEvent.VK_RIGHT :
                x += 5;
                break;
            case KeyEvent.VK_DOWN :
                y += 5;
                break;
            }
        }

    }

}

  • 写回答

4条回答 默认 最新

  • 纵横车 2015-10-27 10:48
    关注

    监听器对象应该绑定在JFrame上面。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog