我在JPanel上 画了一个图形
我怎么实现删除这个图形的功能啊 

解决方案 »

  1.   

    重载paint方法?
    就是搞个什么都没的
      

  2.   

    怎么画的怎么删。其实,删比画简单多啦。呵呵。
    最简单的办法,调用一下父类的绘制方法就搞定啦。
    super.paintComponent( g );如果不知怎么使用这句代码,或者用了没有效果。
    就把你绘制的代码贴出来,一定帮你搞定。呵呵。
      

  3.   

    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    public class Test4 extends JFrame{ @Override
    public void paint(Graphics arg0) {
    // TODO Auto-generated method stub
    new Move_1(jpanel_1).start();
    }
    /**
     * @param args
     */
    public Test4(){
    jpanel_1 = new JPanel();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.getContentPane().add(jpanel_1);
    this.setSize(500,500);
    this.setVisible(true);
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
                new Test4();
    }
        class Move_1 extends Thread{
         Graphics g ;
         final int A_O_G=10;
           int panelHeight;
           JPanel jp;
         public Move_1(JPanel jp)
         {
              this.jp = jp;
           this.panelHeight= jp.getSize().height;
           g = jp.getGraphics();
           g.drawOval(0, 0, 20, 20);
         }
         public void run(){
            double realY;
         float time=0.0f;
         while(true){
         try {
         /*
          * 休眠0.5秒 就是 让每隔0.5秒  改变一次位置
          * */
    this.sleep(500);
    time +=0.1f;
    realY=A_O_G*Math.sqrt(time)/2;
    //消除以前绘制的图形

    g.drawOval(0, (int)(A_O_G*time), 20, 20);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
             }
         }
        }
        JPanel   jpanel_1;
    }
      

  4.   

    我改成这样
          jp.paint(g);可以了就是觉得 自己的办法很本戳你们帮我写一个 模拟自由落体运动的程序好吗 ??
    给我参考参考
      

  5.   

    嗯,我写了一下。供楼主参考:import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class BallPanel extends JPanel { public static void main(String[] args) {
    JFrame frame = new JFrame("自由落体模拟");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new BallPanel());
    frame.setSize(300, 600);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }

    public BallPanel() {
    timer = new Timer( interval, new ActionListener(){
    public void actionPerformed(ActionEvent e) {
    moveBall();
    }
    });
    timer.start();
    } private void moveBall() {
    speed += g * interval / 1000 ;
    y += speed;
    if( y >= getHeight() - r )
    {
    y = getHeight() - r;
    timer.stop();
    }
    repaint();
    }

    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(ballColor);
    g.fillOval(x, y, r, r);
    }

    private Color ballColor = Color.red; //小球颜色
    private int x = 100, y; //小球初坐标
    private int r = 20; //小球半径
    private double speed = 0; //速度

    private int interval = 50; //间隔时间:50毫秒
    private Timer timer; //计时器

    static final double g = 9.8; //重力加速度:9.8米/秒,姑且每米算1像素吧,呵呵。
    }
      

  6.   

    [接6楼]
    把代码拷过去之后,可以根据你机器的速度适当调一下interval的值。
    运行起来,可以清楚地看到小球下落得越来越快——这就是加速度的效果。可以把小球当成一个单独的类来写,但那样代码会多一些,理解的难度更大一些。就这样吧,绝对是正解。呵呵。
      

  7.   

    正如前面说的,删比画容易。可以将Panel的背景设置为white。
    设置一个标志,是否画的标志,若是画则按你原来的,否则把背景设置为white后,就退出paint()。