界面上有三个容器,一个物体分别通过这三个容器.用java如何动态的(比如说闪动的点)显示它从这三个容器走过的轨迹!

解决方案 »

  1.   

    你的问题我看的不是很明白,
    写了点东西,希望能帮助到你。
    大概的思路是:
    1:肯定需要一个线程。
    2:需要一个画布JFrame,和一个移动的物体(继承自JComponent,
    并且重写他的paint方法,在这里你可以决定这个物体是一个点还是什么的,
    再调用repaint方法重画这个物体)。
    3:定义了一个roadmap类,来描述画点的位置。
    这个不好定义,你可以用一个list的东西,来放置计算好的位置。
    如上面你所说的(显示它从这三个容器走过的轨迹),那么你肯定要在这个类中定义好你想要显示的每个位置。
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import javax.swing.BoxLayout;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    class Area extends JComponent{
    RoadMap roadMap; public Area(RoadMap roadMap) {
    this.roadMap = roadMap;
    setBackground(Color.WHITE);
    setOpaque(true);
    } public void paint(Graphics g) {
    if (isOpaque()) {
    g.setColor(getBackground());
    g.fillRect(getX(), getY(), getWidth(), getHeight());
    }
    g.setColor(Color.BLUE);
    g.fill3DRect(roadMap.getPoint().x, roadMap.getPoint().y, 15, 15, true);
    }
    public void doTask(){
    new Thread(){
    public void run(){
    while (true){
    try{
      this.sleep(50);
      Area.this.repaint();
      }catch(Exception e){
      
      }
      }
      }
      }.start();
    }
    }
    class RoadMap{
    private int i;
    private int j;
    private Point p=new Point();
    public Point getPoint(){
    p.x+=1;
    p.y+=1;
    return p;
    }
    }public class Test {

      Area area = new Area(new RoadMap());
      private void buildUI(Container container) {
        container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
        container.add(area);
        area.setAlignmentX(Component.LEFT_ALIGNMENT);
        area.doTask();
      }
      
      public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.setPreferredSize(new Dimension(300,500));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Test controller = new Test();
        controller.buildUI(frame.getContentPane());
        frame.pack();
        frame.setVisible(true);
      }}