【问题标题】:Java 2D. Hovering over CircleJava 2D。悬停在圆圈上
【发布时间】:2010-12-22 15:51:48
【问题描述】:

如果我使用 Java2D 绘制一些圆圈。当我将鼠标悬停在任何圆圈上时,有没有办法显示一些文本?即我想显示那个圈子的 ID 和其他一些东西。

【问题讨论】:

    标签: java user-interface awt java-2d


    【解决方案1】:

    有多种方法可以实现您想要的。这是一种解决方案。我假设您正在使用 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
    

    【讨论】:

      【解决方案2】:

      我不知道你是否可以直接这样做。但是您可以使用简单的数学来检查光标位置: (x-a)^2+(y-b)^2=r^2 其中 x,y 是光标位置 a,b 是圆心,r 是半径。

      【讨论】:

        【解决方案3】:

        您必须保存所有中心和半径,并针对当前鼠标位置进行测试。

        这是非常简单的操作。如果鼠标位置与其中一个圆心的距离小于半径,则鼠标在其中,您可以绘制所需的悬停消息。

        这里有一个问题显示了数学:Equation for testing if a point is inside a circle

        希望对您有所帮助...

        有一个 Polygon 类可能会为你做这件事(包含方法),但没有一个实现类是一个圆圈:S

        【讨论】:

        • 最好使用圆方程(更改 == 为
        • 真的。我应该说与平方半径相比的平方距离:D 我指出了另一个有 python 代码的问题链接:D 感谢您的更正:D
        猜你喜欢
        • 2013-03-17
        • 2015-09-12
        • 2016-09-29
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 2011-09-24
        • 2013-06-18
        相关资源
        最近更新 更多