JavaIdot 2021-11-07 19:20 采纳率: 50%
浏览 43
已结题

java问题如何让编程猫移动

我用编写java的eclipse创建了2个类,CodeMao类、MoveFrame类。
下面是CodeMao类的代码:

package MyProject;

import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.event.*;

/**
 * 编程猫类
 */

public class CodeMao {
    
    //坐标(初始化)
    private static int x = 0,y = 0;
    //image对象
    private Image img;
    
    /**
     * 构造方法
     */
    public CodeMao() {
        //实例化img对象
        img = new ImageIcon("image/codemao.jpg").getImage();
    }
    
    /**
     * 获取x
     * @return 编程猫的x
     */
    public int getX() {
        return x;
    }
    
    /**
     * 获取y
     * @return 编程猫的y
     */
    public int getY() {
        return y;
    }
    
    /**
     * 加x函数
     */
    public void X_add(int num) {
        x += num;
    }
    
    /**
     * 加y函数
     */
    public void Y_add(int num) {
        y += num;
    }
    
    /**
     * 获取codemao图片的函数
     * @return codemao图片
     */
    public Image getImage() {
        return img;
    }
}

还有一个MoveFame类,代码如下:


```java
package myProjcet;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
 * “移动”窗体 该实例可以让编程猫移动
 */

public class MoveFrame extends JFrame {
    /**
     * 全部变量
     */
    public static CodeMao cat;
    
    /**
     * 构造方法
     */
    public MoveFrame() {
//        属性
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500, 500);
        setLocationRelativeTo(null);

//        创建codemao对象
        cat = new CodeMao();

//        panel对象,方便画图
        JPanel jp = new panel();
        setContentPane(jp);
        
//        添加键盘敲击事件
        addKeyListener(new KeyListener() {

            public void keyTyped(KeyEvent e) {}
            @Override
            public void keyPressed(KeyEvent e) {
                /**
                 *按下事件
                 */
                int code = e.getKeyCode();
                //按w
                if (code==e.VK_W) {
                    cat.Y_add(-5);
                }
                //按s
                if (code==e.VK_S) {
                    cat.Y_add(5);
                }
                //按a
                if (code==e.VK_A) {
                    cat.X_add(-5);
                }
                //按d
                if (code==e.VK_D) {
                    cat.X_add(5);
                }
            }
            public void keyReleased(KeyEvent e) {}
            
        });
        
        //线程对象
        new Thread() {
            public void run() {
                //死循环
                while (true) {
                    jp.repaint();
                }
            }
        }.start();
    }

    /**
     * 主方法
     */
    public static void main(String[] args) {
        new MoveFrame().setVisible(true);
    }

    /**
     * panel 类
     */
    private class panel extends JPanel {
        public void paint(Graphics g) {
            g.drawImage(cat.getImage(), cat.getX(), cat.getY(), this);
        }
    }
}

虽然运行可以,但是编程猫按按键走路时,他会出现n个编程猫,怎么办?

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/517059382636153.png "=600 #left")
  • 写回答

1条回答 默认 最新

  • NoBug. 2021-11-07 19:25
    关注

    你在paint方法里加一句
    super.paintComponent(g);试试,不行再交流

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 目标计数模型训练过程中的问题
  • ¥100 Acess连接SQL 数据库后 不能用中文筛选
  • ¥15 用友U9Cloud的webapi
  • ¥20 电脑拓展屏桌面被莫名遮挡
  • ¥20 ensp,用局域网解决
  • ¥15 Python语言实验
  • ¥15 我每周要在投影仪优酷上自动连续播放112场电影,我每一周遥控操作一次投影仪,并使得电影永远不重复播放,请问怎样操作好呢?有那么多电影看吗?
  • ¥20 电脑重启停留在grub界面,引导出错需修复
  • ¥15 matlab透明图叠加
  • ¥50 基于stm32l4系列 使用blunrg-ms的ble gatt 创建 hid 服务失败