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

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 为啥快手广告联盟的广告这么难出来
  • ¥15 k8s集群重启后,kubelet一直报systemctl restart kubelet.service "Failed to delete cgroup paths"
  • ¥15 微信小程序构建工具类发布到npm,install后报错
  • ¥15 amesim液压仿真问题
  • ¥15 MATLAB优化设计
  • ¥15 ANN预测模型 200大米
  • ¥20 优秀学生的问题 oj java
  • ¥15 scratch-gui 如何集成进 react native
  • ¥15 把全局悬浮窗改为局内悬浮窗
  • ¥15 Excel vba编程调用word如何读取换行符