Как получить объект Graphic2D, чтобы точно следовать указателю мыши в Java? - PullRequest
3 голосов
/ 24 ноября 2011

В приведенном ниже коде я просто использовал слушатель мыши, чтобы получить координаты XY мыши, а затем вызвать перерисовку. В методе рисования я нарисовал прямоугольник, используя те же координаты XY для позиции. Прямоугольник следует, но на расстоянии от указателя мыши. Я ожидаю, что верхний левый угол прямоугольника коснется указателя мыши.

Я что-то не так делаю?

Почему между указателем мыши и объектом Rectangle есть расстояние?

public void mouseMoved(MouseEvent e){
    x = e.getX();
    y = e.getY();

    repaint();
}

public class Canvas extends JPanel{
    Canvas(){}

    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.red);
        g2.fillRect(x, y, 50, 50);          
    }
}

1 Ответ

4 голосов
/ 24 ноября 2011
  1. Не называйте свой класс Canvas, есть компонент AWT с таким именем, поэтому он становится запутанным.

  2. Пользовательское рисование выполняется путем переопределения метода paintComponent () JPanel, а не метода paint ().

  3. Вы не показываете, куда добавляете MouseListener на панель. Вы, вероятно, вместо этого добавляете его в кадр.

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

...