做一张图,要求控制几个小点在上面移动,还要即时返回坐标位置

解决方案 »

  1.   

    找到一个代码,你再稍微修改一下,应该就满足你的要求了,呵呵
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;public class BallThread extends Frame
    {
      public BallThread()
      {
        setSize(300,200);
        setTitle("Ball Thread Demo");
        addWindowListener(new WindowAdapter(){
          public void windowClosing(WindowEvent e){
            System.exit(0);
          }
        });
        final MainPanel canvas = new MainPanel();
        canvas.balls = new Vector();
        add((Panel)canvas,"Center");
        Panel p = new Panel();
        addButton(p,"Start",new ActionListener(){
          public void actionPerformed(ActionEvent evt){
            Ball b = new Ball(canvas);
            canvas.balls.add(b);
            b.start();
          }
        });
        addButton(p,"Close",new ActionListener(){
          public void actionPerformed(ActionEvent evt){
            canvas.setVisible(false);
            System.exit(0);
          }
        });
        add(p,"South");
      }
      
      public void addButton(Container c,String title,ActionListener a)
      {
        Button b = new Button(title);
        c.add(b);
        b.addActionListener(a);
      }
      
      public static void main(String[] args)
      {
        Frame f = new BallThread();
        f.show();
      }
    }class MainPanel extends Panel
    {
      public Vector balls;
      synchronized public void paint(Graphics g)
      {
        paintBalls();
      }
      public void paintBalls()
      {
        Enumeration ballenum = balls.elements();
        while(ballenum.hasMoreElements())
        {
          Ball ball = (Ball)ballenum.nextElement();
          ball.draw();
        }
      }
    }class Ball extends Thread
    {
      MainPanel mainpanel;
      private static final int XSize=10;
      private static final int YSize=10;
      private int x=0;
      private int y=0;
      private int dx=2;
      private int dy=2;
      
      public Ball(MainPanel b)
      {
        mainpanel=b;
      }
      
      public void draw()
      {
        Graphics g=mainpanel.getGraphics();
        g.fillOval(x,y,XSize,YSize);
        g.dispose();
      }
      
      public void move()
      {
        if(!mainpanel.isVisible()) return;
        x+=dx;
        y+=dy;
        Dimension d=mainpanel.getSize();
        if(x<0){x=0;dx=-dx;}
        if(y<0){y=0;dy=-dy;}
        if(x+XSize>=d.width){x=d.width-XSize;dx=-dx;}
        if(y+YSize>=d.height){y=d.height-YSize;dy=-dy;}
        mainpanel.repaint();
      }
      
      public void run()
      {
        try
        {
          draw();
          for(int i=0;i<=1000;i++)
          {
            move();
            sleep(50);
          }
        }
        catch(Exception e)
        {
        }
      }
    }