将圆圈移动到随机位置

时间:2016-01-24 19:45:50

标签: java applet

我正在制作这个绘制圆圈的java小程序,当我用鼠标光标悬停到它时,我需要将圆圈移动到随机位置,此时我的小程序在随机位置绘制圆圈并在我悬停时更改颜色用鼠标圈,但如何使它也移动到一个随机的地方?任何建议将不胜感激。

import java.awt.*; 
import java.applet.*; 
import java.awt.event.*;

public class circle extends Applet implements MouseMotionListener 
{ 
 // The X-coordinate and Y-coordinate of the last Mouse Position. 
     int xpos; 
     int ypos;
//generate random place for circle (in coordinates from 0 to 400
     int x=(int)(Math.random() * 401);
     int y=(int)(Math.random() * 401);
     int width;
     int height;

 // wll be true when the Mouse is in the circle 
     boolean active;

     public void init()  
     {
         width=40;
         height=40;
  // Add the MouseMotionListener to applet 
      addMouseMotionListener(this); 
     }
     public void paint(Graphics g)  
     { 
          if (active){g.setColor(Color.black);} 
          else {g.setColor(Color.blue);}
          g.fillRoundRect(x, y, width, height, 200, 200);

  // This will show the coordinates of the mouse 
  // at the place of the mouse. 
          g.drawString("("+xpos+","+ypos+")",xpos,ypos);

     }

 // This will be excuted whenever the mousemoves in the applet 
     public void mouseMoved(MouseEvent me)  
     {  
          xpos = me.getX(); 
          ypos = me.getY(); 
  // Check if the mouse is in the circle 
         if (xpos > x&& xpos < x+width && ypos > y  
        && ypos < y+height)  
               active = true; 
          else  
              active = false; 
  //show the results of the motion 
          repaint();

     }

     public void mouseDragged(MouseEvent me)  
     { 
     }

  }

1 个答案:

答案 0 :(得分:2)

只需放上

的副本
    x=(int)(Math.random() * 401);
    y=(int)(Math.random() * 401);

进入 paint()方法的条件

    public void paint(Graphics g)  
     { 
      if (active){ 
          g.setColor(Color.black);
          //here
          x=(int)(Math.random() * 401);
          y=(int)(Math.random() * 401);
      }
      ...

鼠标结束时“刷新”位置

修改

由于@MadProgrammer在评论中写下 paint()方法并不是放置应用逻辑的最佳位置。更改位置的最佳位置是将活动标记设置为 True 的监听器。

不要将x,y ...行粘贴到pain()方法中,而应将其粘贴到此处:

    public void mouseMoved(MouseEvent me)  
    {
       ...
       if (xpos > x&& xpos < x+width && ypos > y && ypos < y+height)  
       {
           active = true;
           //here
           x=(int)(Math.random() * 401);
           y=(int)(Math.random() * 401);
       } 
       else  
           ...
    }