Java 2D. Зависание над кругом - PullRequest
2 голосов
/ 03 декабря 2009

Если я нарисую несколько кругов, используя Java2D. Есть ли способ отобразить текст при наведении курсора на любой из кругов? я хочу отобразить ID этого круга и некоторые другие вещи.

Ответы [ 3 ]

2 голосов
/ 03 декабря 2009

Есть несколько способов выполнить то, что вы хотите. Это одно из решений. Я предполагаю, что вы используете Ellipse2D для создания круга. И я предполагаю, что вы рисуете круг на J-компоненте, как JPanel.

Итак, вы объявляете Эллипс.

  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
1 голос
/ 03 декабря 2009

Я не знаю, можете ли вы сделать это напрямую. Но Вы можете использовать простую математику для проверки положения курсора: (x-a) ^ 2 + (y-b) ^ 2 = r ^ 2, где x, y - это положение курсора a, b - центр окружности, а r - радиус.

0 голосов
/ 03 декабря 2009

Вам нужно будет сохранить все центры и радиус и проверить их относительно текущей позиции мыши.

это довольно простая операция. Если расстояние от позиции мыши до центра одной из окружностей меньше радиуса, мышь находится внутри нее, и вы можете нарисовать нужное сообщение при наведении курсора.

здесь есть вопрос, который показывает математику: Уравнение для проверки, находится ли точка внутри окружности

Надеюсь, это поможет ...

Существует класс Polygon, который может сделать это за вас (метод содержит), но ни один из реализующих классов не является кругом: S

...