java基础知识,我想让一个球移动,怎么画出一条圆柱出来了?

import java.awt.Color;import java.awt.Graphics;import javax.swing.JFrame;import javax.import java.awt.Color;import java.awt.Graphics;import javax.swing.JFrame;import javax.swing.JPanel;public class A1 extends JFrame{public static void main(String[] args) { new A1(); } A1(){ this.setSize(700,500); this.setLocation(300, 100); this.setResizable(false);//窗口可调尺寸(假) this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); Myqiu m=new Myqiu(); this.add(m); m.move1(); //这里不对?怎么不能用this.move1(); } } class Myqiu extends JPanel{ //球类,画球,球移动 double x=100; double y=100; public void paint(Graphics g) { //画圆球 g.setColor(Color.black); g.fillOval((int)x, (int)y, 30, 30); } public void move1(){ //球体移动 while(true){ try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } x+=10; this.repaint(); //重画 } }}
2026年09月28日 03:11
有3个网友回答
网友(1):

package test;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class A1 extends JFrame {
    public static void main(String[] args) {
        new A1();
    }

    A1() {
        this.setSize(700, 500);
        this.setLocation(300, 100);
        this.setResizable(false);// 窗口可调尺寸(假)
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

        Myqiu m = new Myqiu();
        this.add(m);
        m.move1(); // 这里不对?怎么不能用this.move1();

    }

}

class Myqiu extends JPanel { // 球类,画球,球移动
    double x = 100;
    double y = 100;

    public void paint(Graphics g) { // 画圆球
    // 在这里加入一行代码
        super.paint(g);
        g.setColor(Color.black);
        g.fillOval((int) x, (int) y, 30, 30);
    }

    public void move1() { // 球体移动
        while (true) {
            try {
                Thread.sleep(30);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            x += 10;
            this.repaint(); // 重画
        }
    }
}

你的程序中,少写了一行代码!就是在paint()方法内,写入super.paint(g);改后,测试正常.

网友(2):

主要原因就是你不停的在面板上面画圆,然后你画第二个的时候,第一个圆还在上面,所以无限的圆连起来就看见像个圆柱了,所以你简单的改一下,每次画圆之前都清空当前画布,就可以有运动的效果了

public void paint(Graphics g) { // 画圆球
g.clearRect(0, 0, 700, 500);
g.setColor(Color.black);
g.fillOval((int) x, (int) y, 30, 30);
}

网友(3):

在paint()方法第一行加上super.paint(g);