当前位置: 首页 > 知识库问答 >
问题:

尝试显示向下移动的圆圈,但无法删除之前绘制的圆圈

韦思淼
2023-03-14

我正在尝试制作重力的效果,但它看起来只是有越来越多的圆圈条纹,而不是单个圆圈向下移动。我不知道如何删除我已经绘制的圆圈。顺便说一句,代码中没有错误。

import javax.swing.Timer;
import javax.swing.*;

import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
public class Tester {


    static JFrame frame;
    static JPanel panel;
    static JButton button;
    static ArrayList<Ellipse2D.Double> circles = new       ArrayList<Ellipse2D.Double>();

    static void init(){
        frame = new JFrame();
        panel = new JPanel(new BorderLayout());
        button = new JButton("South");
        panel.add(button, BorderLayout.SOUTH);

        frame.add(panel);

        frame.setVisible(true);
        panel.setVisible(true);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setBackground(Color.LIGHT_GRAY);



}

public static void main(String[] args) {
     init();

class MeteorMover extends JPanel{

         Ellipse2D.Double m;
         int x = 40,y=40;
         boolean isSettingGravity=true;

         public MeteorMover(){
             m = new Ellipse2D.Double(x,y,30,30);

         }

         void createNewMeteor(int n){
            repaint(); 
         }

         void setGravity(){
             isSettingGravity = true;
             for (int i=0;i<circles.size();i++){
                 Ellipse2D.Double m = circles.get(i);
                 m= new Ellipse2D.Double(m.getX(),m.getY()+1,30,30);
                circles.set(i, m);

             }
             repaint();
         }

         protected void paintComponent(Graphics g){
             Graphics2D g2 = (Graphics2D) g;
             g2.setColor(Color.WHITE);
             if (isSettingGravity){
             for (Ellipse2D.Double c:circles){
                g2.draw(c); 
             }
             isSettingGravity = false;
             }
             else{
             m = new Ellipse2D.Double(x,y,30,30);
             circles.add(m);


             g2.fill(m);
             g2.draw(m);

             Random r = new Random();
             x = r.nextInt(500);
             y=r.nextInt(100);
             }

         }

     }

     final MeteorMover m = new MeteorMover();
     panel.add(m);
     panel.repaint();


     class TimerListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent arg0) {

             m.createNewMeteor(1);
        }

     }
     TimerListener cListener = new TimerListener();
     Timer timer = new Timer(1000,cListener);
     timer.start();

     class TimerListener2 implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent arg0) {

            m.setGravity();
        }

     }



     TimerListener2 gListener = new TimerListener2();
     Timer gTimer = new Timer(100,gListener);
     gTimer.start();

}

}

共有2个答案

田佐
2023-03-14

使用图形擦除没有直接方法,您有两个选项:

>

  • 如果您总是知道需要擦除哪个椭圆,并且椭圆从不相交,那么您可以在内存中保留下一个要擦除的椭圆,并调用g。设置颜色(bgColor);g、 填充(擦除Dellipse)

    这是一个更可靠的选项,您可以保留一个椭圆的数组列表来绘制。您可以清除所有窗格并重新绘制ArrayList中的所有椭圆,如果要删除一个椭圆,只需调用ArrayList.remove(erasedElipseIndex)

  • 燕宏胜
    2023-03-14

    调用super.paintComponent(g)

    protected void paintComponent(Graphics g) {
                    super.paintComponent(g);
    

    阅读有关super.paint组件的更多信息。

     类似资料:
    • 我知道我可以只打印出图像,但我想找出玩家何时与不正确的颜色碰撞(就像颜色切换中的做法一样),以便他们在这种情况下失败,我假设如果我使用图片是不可能的。我该怎么做?

    • 问题内容: 因此,我试图绘制一个标签,其中包含一个显示圆圈的图标。圆圈最初将被填充为红色,然后根据我按下的三个按钮中的哪个按钮,将使用重绘将其更改为绿色,蓝色或红色。 这是我到目前为止的内容: 我的问题是,我不知道在paintIcon中如何传递Graphics g。有其他方法可以做到这一点吗?我对此表示感谢。 问题答案: 图标的大小为(10,10)。50,超出了Icon的范围。相对于图标完成绘制,

    • 本文向大家介绍Android中TextView显示圆圈背景或设置圆角的方法,包括了Android中TextView显示圆圈背景或设置圆角的方法的使用技巧和注意事项,需要的朋友参考一下 前言 在我们学习android这么久,而且使用TextView那么长时间,我们一直没有用过给TextView添加背景,或者是给TextView添加添加边框,以及怎么样设置TextView的形状。今天在写代码的时候就用

    • 我试着把第二个播放器放在一个有圆角的框架内(这个答案和这个答案),但是播放器总是会跳出父框架并绘制视频的完整矩形。 我发现这个解决方案使用GLSurfaceView,但是这个解决方案使用经典的MediaPlayer而不是ExoPlayer。

    • 问题内容: 如何使用HTML5和CSS3画圆? 也可以在其中放入文字吗? 问题答案: 本身不能画一个圆。但是您可以制作与圆相同的东西。 您必须创建一个带有圆角(通过border-radius)的矩形,该圆角是要制作的圆的宽度/高度的一半。

    • 本文向大家介绍C#绘制椭圆的方法,包括了C#绘制椭圆的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#绘制椭圆的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。