我正在制作这个绘制圆圈的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)
{
}
}
答案 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
...
}