解决方案 »

  1.   

    public Car()
    {
    System.out.println("***");
    path = new GeneralPath();
    path.moveTo(50, 50);
    path.lineTo(200, 200);
    float[] dash = new float[] { 5, 5 };

    for (int i = 0; i < 6; i++) {
    bs[i] = new BasicStroke(6.0f, BasicStroke.CAP_BUTT,
    BasicStroke.JOIN_MITER, 10.0f, dash, i);
    }
    this.OpenFile=new JButton("Open File");
    this.lblTime = new JLabel("Start");
            this.lblTime.setFont(new Font("Monospaced", Font.BOLD, 30));
            this.lblTime.setHorizontalAlignment(SwingConstants.CENTER);
            this.lblTime.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e)//鼠标点击事件
                {
                    begin = true;
                    lblTime.setText(timeStr(Start));
                   
                }
            });
            add(lblTime);
            add(OpenFile);
          
            //setLayout(new BorderLayout());
            //add(lblTime, BorderLayout.NORTH);
            this.setLayout(null);
            lblTime.setBounds(800,20,100,30);
            OpenFile.setBounds(600,20,150,30);
    timer.start();
    }
    但是JLabel  lbltime就没有这个情况。。
      

  2.   

    你是不是重写了paint等会影响窗体绘制的方法?
    虚线的问题你不是自己定义了那几个BasicStroke,不就是那样的虚线吗,你应该修改了窗体线段的绘制方法吧
      

  3.   

    嗯,是重写了paint。。那是不是就不能同时画虚线啊。。
      

  4.   

    刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??
      

  5.   

    刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??
    你把paint部分的代码发出来看看
      

  6.   

    刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??
    你把paint部分的代码发出来看看public void paintComponent(Graphics g) {

    //System.out.println("senderX:"+senderX);
    //System.out.println("receiverX:"+receiverX);
    Graphics2D g2 = (Graphics2D) g;
    if (!begin) return;//鼠标点击之后begin=true
    super.paintComponent(g);
    g.setColor(Color.BLACK);//画边框
    //g2.drawLine(300, 0, 300, 1000);
    g2.drawRect(505, 105, 600, 550);


            if (Start >= MAXTIME) {
                lblTime.setText("END!!");
            }
            Start += 1;
            lblTime.setText(timeStr(Start));
           
            
    Image icar = getToolkit().getImage("blude_car2.gif");//读取图片
    Image Sroad=getToolkit().getImage("road2.PNG");//读取图片
    Image Hroad=getToolkit().getImage("road1.PNG");//读取图片

    //BufferedImage bufferedImage=(BufferedImage) getToolkit().getImage("blude_car2.gif");
    //System.out.println("sy:"+sy);
    //System.out.println("nsy:"+nsy);
    for (int i = 0; i < Open.carnum; i++) //小车运动
    {
    if (getSx()[i] < getEx()[i])//小车横向移动
    { // System.out.println("************");
    getSx()[i] += ((double)getdelay1()[i] / 1000);//速度除以1000
    //System.out.println(getdelay1()[i] / 10);
    // Senderx[i] = getSx()[i];
    }
    if (getSy()[i] < getEy()[i]) //小车纵向移动
    {

    getSy()[i] += ((double)getdelay1()[i] / 1000);
    //System.out.println((double)getdelay1()[i] / 1000);
    //System.out.println(getSy()[i] );
    }
    if (nsx[i]< nex[i])//小车横向移动
    {
     g.drawImage(Hroad, 0, (int)ney[i],50, 1000, null);
    }
    if (nsy[i] < ney[i]) //小车纵向移动
    {

    g.drawImage(Sroad, (int)nex[i],0,50, 1000, null);

    }  File f = new File("blude_car2.gif");
                     
    try //小车图片移动,坐标的数据为浮点型
    {

     BufferedImage image = ImageIO.read(f);
         
         g2.drawRenderedImage(image, AffineTransform.getTranslateInstance((double)getSx()[i], (double)getSy()[i]));
            //g2.drawRenderedImage(image, AffineTransform.getTranslateInstance(10.2, 10.8));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
             
    //g2.setColor(Color.YELLOW);
    // g.drawImage(icar, getSx()[i], getSy()[i], 40, 30, null);
      // g.drawImage(map, 350, 5, 100, 100, null);
    //Rectangle2D rect = new Rectangle2D.Double(getSx()[i], getSy()[i], 40, 30);
    //g2.draw(rect);
    //Image2D im=new Image2D(1,1,2,2);
    //g2.setStroke(bs[(index++) % 6]);//设置画刷

    //AffineTransform transform = AffineTransform.getTranslateInstance(100,200); //先获得偏移
    //transform.scale(0.5, 0.5); // 在此基础上,长宽均缩小至50%
    //g2.drawRenderedImage((RenderedImage) icar, transform);

    //g2.drawRenderedImage(buffer1, AffineTransform.getTranslateInstance(100.0, 200.0));

    }

    g.setColor(Color.RED);
    //System.out.println(Open.senderID+"  "+Open.receiverID);



    if(isStart)
    {
    //x=senderX;
    //System.out.println("senderx:"+senderX);
    //System.out.println("receiverx:"+receiverX);

    g.setColor(Color.BLUE);

    //g.fillRect(x, y, 15,15);
    //Rectangle2D.Float rect=new Rectangle2D.Float(x,y,10F,10F);
    //g2.draw(rect);
    //g.fillRect(x, y, 10,10);
    //System.out.println(sending);

    for(int i=0;i<Open.sno;i++)//发送的包的信息
    {

    senderX=(int)sx[(int)Double.parseDouble(Open.sender[i][2])];
    senderY=(int)sy[(int)Double.parseDouble(Open.sender[i][2])];
    senderID=(int)Double.parseDouble(Open.sender[i][2]);
    //g.fillRect(x, y, 10,10);
    //x=senderX;
    //System.out.println(senderX+" "+Open.sender[i][2]+" "+senderY+"--------"+x+" "+y);
    //System.out.println(Open.sender[i][6]);

    if(Open.receiver2[i][0].equals("r"))
    {

    //System.out.println(i);
    //System.out.println(receiverX+" "+Open.receiver2[i][2]+" "+receiverY+"--------"+x+" "+y);
    receiverID=(int)Double.parseDouble(Open.receiver2[i][2]);
    receiverX = (int)sx[(int)Double.parseDouble(Open.receiver2[i][2])];
    receiverY = (int)sy[(int)Double.parseDouble(Open.receiver2[i][2])] ;

    if((Double.parseDouble(timeStr(Start))>=Open.STIME[i])&&(Double.parseDouble(timeStr(Start))<=Open.RDTIME[i]))
    {
    System.out.println(Open.receiver2[i][6]);
    g.setColor(Color.BLUE);
    g.fillRect(x, y, 15,15);
            //g.drawLine(senderX+10, senderY+10, receiverX+10, receiverY+10);
    //Drawstring(g,senderX,senderY,receiverX,receiverY,Open.sender[i][5]);
    // g2.drawString(Open.sender[i][5],(senderX+(senderX+receiverX)/2)/2,(senderY+(senderY+receiverY)/2)/2);
    // g2.drawString(Open.sender[i][5],((senderX+receiverX)/2+receiverX)/2,(receiverY+(senderY+receiverY)/2)/2);
    g.setColor(Color.RED);
    g.drawString(Open.sender[i][5],x,y-5);
    g.drawString(Open.sender[i][6],x,y+25);
    g.setColor(Color.YELLOW);
    g2.drawString("S",senderX+12,senderY-5);
    g2.drawString("R",receiverX+12,receiverY+55);


    }


    }


    // if((Double.parseDouble(timeStr(Start))==Open.STIME[i]))
    // {
    // packetID.add((int)Double.parseDouble(Open.sender[i][5]));
    // }
    // if((Double.parseDouble(timeStr(Start))==Open.RDTIME[i]))
    // {
    // packetID.remove((int)Double.parseDouble(Open.sender[i][5]));
    // }

    if(Open.receiver2[i][0].equals("D"))
    {
    receiverID=(int)Double.parseDouble(Open.sender[i][2]);
    receiverX=(int)sx[(int)Double.parseDouble(Open.sender[i][2])];
    receiverY=(int)sy[(int)Double.parseDouble(Open.sender[i][2])];
    //continue;
    }
    //System.out.println(i+" :"+senderID+" "+receiverID+" "+Open.receiver2[i][0]);


    if(receiverX>=senderX)
    {
    x +=80;
    if((x<=senderX+(receiverX-senderX)/5)&&(x>=senderX))
    {
    //y=receiverY+(senderY-receiverY)/5;
    y=senderY;
    //System.out.println("1 senderX="+senderX+"------"+"receiverX="+receiverX+"------"+"senderY="+senderY+"------"+"receiverY="+receiverY+"x="+x+"------"+"y="+y);
    }
    if((x<=senderX+2*(receiverX-senderX)/5)&&x>senderX+(receiverX-senderX)/5)
    {
    //y=receiverY+2*(senderY-receiverY)/5;
    y=senderY+(receiverY-senderY)/4;
    //System.out.println("2 senderX="+senderX+"------"+"receiverX="+receiverX+"------"+"senderY="+senderY+"------"+"receiverY="+receiverY+"x="+x+"------"+"y="+y);
    }
    if((x<=senderX+3*(receiverX-senderX)/5)&&x>senderX+2*(receiverX-senderX)/5)
    {
    //y=receiverY+3*(senderY-receiverY)/5;
    y=senderY+2*(receiverY-senderY)/4;
    //System.out.println("3 senderX="+senderX+"------"+"receiverX="+receiverX+"------"+"senderY="+senderY+"------"+"receiverY="+receiverY+"x="+x+"------"+"y="+y);
    }
    if((x<=senderX+4*(receiverX-senderX)/5)&&(x>senderX+3*(receiverX-senderX)/5))
    {
    //y=receiverY+4*(senderY-receiverY)/5;
    y=senderY+3*(receiverY-senderY)/4;
    //System.out.println("4 senderX="+senderX+"------"+"receiverX="+receiverX+"------"+"senderY="+senderY+"------"+"receiverY="+receiverY+"x="+x+"------"+"y="+y);
    }
    if((x<=receiverX)&&(x>senderX+4*(receiverX-senderX)/5))
    {
    y=receiverY;
    //System.out.println("5 senderX="+senderX+"------"+"receiverX="+receiverX+"------"+"senderY="+senderY+"------"+"receiverY="+receiverY+"x="+x+"------"+"y="+y);

    }
    if(x > receiverX) {
    x =senderX ;
    y=senderY;
    //System.out.println("6 senderX="+senderX+"------"+"receiverX="+receiverX+"------"+"senderY="+senderY+"------"+"receiverY="+receiverY+"x="+x+"------"+"y="+y);

    //x=1;
    }


    }
    //if((receiverX< senderX)&&(receiverY<senderY))
    //if(receiverY<senderY)

    if(receiverX< senderX)
    {
    x -= 50;
    if((x<=receiverX+(senderX-receiverX)/5)&&(x>receiverX))
    {
    //y=receiverY+(senderY-receiverY)/5;
    y=receiverY;
    }
    if((x<=receiverX+2*(senderX-receiverX)/5)&&x>receiverX+(senderX-receiverX)/5)
    {
    //y=receiverY+2*(senderY-receiverY)/5;
    y=receiverY+(senderY-receiverY)/4;
    }
    if((x<=receiverX+3*(senderX-receiverX)/5)&&x>receiverX+2*(senderX-receiverX)/5)
    {
    //y=receiverY+3*(senderY-receiverY)/5;
    y=receiverY+2*(senderY-receiverY)/4;
    }
    if((x<=receiverX+4*(senderX-receiverX)/5)&&(x>receiverX+3*(senderX-receiverX)/5))
    {
    //y=receiverY+4*(senderY-receiverY)/5;
    y=receiverY+3*(senderY-receiverY)/4;
    }
    if((x<=senderX)&&(x>receiverX+4*(senderX-receiverX)/5))
    {
    y=senderY;
    }
    if(x < receiverX) {
    x =senderX;
    y=senderY;
    //x=1;
    }

    } }
    }

    /*
    if(isStart)
    {
    //x=senderX;
    x=x+10;
    g.setColor(Color.RED);
    g.fillRect(x, y, 30,15);
    }
    */ }写的有点乱。。
      

  7.   

    刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??
    你把paint部分的代码发出来看看
    是不是不在这部分代码里面呀?我定义了一个按钮,按钮启动后开始调用repaint()方法。。
      

  8.   

    没仔细看,可能你每次paint之前没有擦除原来的吧
      

  9.   

    已经搞定啦~我把timer放到一个按钮里面就ok了!