【发布时间】:2010-12-22 15:51:48
【问题描述】:
如果我使用 Java2D 绘制一些圆圈。当我将鼠标悬停在任何圆圈上时,有没有办法显示一些文本?即我想显示那个圈子的 ID 和其他一些东西。
【问题讨论】:
标签: java user-interface awt java-2d
如果我使用 Java2D 绘制一些圆圈。当我将鼠标悬停在任何圆圈上时,有没有办法显示一些文本?即我想显示那个圈子的 ID 和其他一些东西。
【问题讨论】:
标签: java user-interface awt java-2d
有多种方法可以实现您想要的。这是一种解决方案。我假设您正在使用 Ellipse2D 创建圆。我假设您正在像 JPanel 这样的 JComponent 上绘制圆圈。
所以你声明了椭圆。
Shape circle = new Ellispe2D.Double(x, y, width, height);
然后你实现 MouseMotionListener 来检测用户何时将鼠标移到 JPanel 上。
public void mouseMoved(MouseEvent e){
if(circle.contains(e.getPoint())){
//the mouse pointer is over the circle. So set a Message or whatever you want to do
msg = "You are over circle 1";
}else{
msg = "You are not over the circle";
}
}
然后在paint() 或paintComponent 方法中(无论你要覆盖哪一个来进行绘画):
g2.fill(circle);
g2.drawString(msg, 10, 10); //write out the message
【讨论】:
我不知道你是否可以直接这样做。但是您可以使用简单的数学来检查光标位置: (x-a)^2+(y-b)^2=r^2 其中 x,y 是光标位置 a,b 是圆心,r 是半径。
【讨论】:
您必须保存所有中心和半径,并针对当前鼠标位置进行测试。
这是非常简单的操作。如果鼠标位置与其中一个圆心的距离小于半径,则鼠标在其中,您可以绘制所需的悬停消息。
这里有一个问题显示了数学:Equation for testing if a point is inside a circle
希望对您有所帮助...
有一个 Polygon 类可能会为你做这件事(包含方法),但没有一个实现类是一个圆圈:S
【讨论】: