JButton显示问题

tanweijia888 2014-07-16 05:36:44
在jpanel类里定义了一个JButton,但是当鼠标移动到这个按钮上时,会在左上角出现一个重影,然后程序运行时就会有一个虚线框一直围绕在按钮旁边,这是怎么回事呢?
...全文
371 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanweijia888 2014-07-18
  • 打赏
  • 举报
回复
引用 6 楼 vnvlyp 的回复:
[quote=引用 5 楼 tanweijia888 的回复:] [quote=引用 3 楼 vnvlyp 的回复:] 你是不是重写了paint等会影响窗体绘制的方法? 虚线的问题你不是自己定义了那几个BasicStroke,不就是那样的虚线吗,你应该修改了窗体线段的绘制方法吧
刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??[/quote] 你把paint部分的代码发出来看看[/quote] 是不是不在这部分代码里面呀?我定义了一个按钮,按钮启动后开始调用repaint()方法。。
tanweijia888 2014-07-18
  • 打赏
  • 举报
回复
引用 9 楼 vnvlyp 的回复:
没仔细看,可能你每次paint之前没有擦除原来的吧
已经搞定啦~我把timer放到一个按钮里面就ok了!
vnvlyp 2014-07-18
  • 打赏
  • 举报
回复
没仔细看,可能你每次paint之前没有擦除原来的吧
tanweijia888 2014-07-16
  • 打赏
  • 举报
回复
引用 6 楼 vnvlyp 的回复:
[quote=引用 5 楼 tanweijia888 的回复:] [quote=引用 3 楼 vnvlyp 的回复:] 你是不是重写了paint等会影响窗体绘制的方法? 虚线的问题你不是自己定义了那几个BasicStroke,不就是那样的虚线吗,你应该修改了窗体线段的绘制方法吧
刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??[/quote] 你把paint部分的代码发出来看看[/quote]

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);
		}
		*/

	}
写的有点乱。。
vnvlyp 2014-07-16
  • 打赏
  • 举报
回复
引用 5 楼 tanweijia888 的回复:
[quote=引用 3 楼 vnvlyp 的回复:] 你是不是重写了paint等会影响窗体绘制的方法? 虚线的问题你不是自己定义了那几个BasicStroke,不就是那样的虚线吗,你应该修改了窗体线段的绘制方法吧
刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??[/quote] 你把paint部分的代码发出来看看
tanweijia888 2014-07-16
  • 打赏
  • 举报
回复
引用 3 楼 vnvlyp 的回复:
你是不是重写了paint等会影响窗体绘制的方法? 虚线的问题你不是自己定义了那几个BasicStroke,不就是那样的虚线吗,你应该修改了窗体线段的绘制方法吧
刚才把画虚线的暂时屏蔽掉了,已经解决了第二个问题!那重写paint的问题应该怎么解决呢??
tanweijia888 2014-07-16
  • 打赏
  • 举报
回复
引用 3 楼 vnvlyp 的回复:
你是不是重写了paint等会影响窗体绘制的方法? 虚线的问题你不是自己定义了那几个BasicStroke,不就是那样的虚线吗,你应该修改了窗体线段的绘制方法吧
嗯,是重写了paint。。那是不是就不能同时画虚线啊。。
vnvlyp 2014-07-16
  • 打赏
  • 举报
回复
你是不是重写了paint等会影响窗体绘制的方法? 虚线的问题你不是自己定义了那几个BasicStroke,不就是那样的虚线吗,你应该修改了窗体线段的绘制方法吧
tanweijia888 2014-07-16
  • 打赏
  • 举报
回复
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就没有这个情况。。
vnvlyp 2014-07-16
  • 打赏
  • 举报
回复
能发一下相关代码吗?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧