Почему getX () getY () MouseEvent кажется смещенным от реальной координаты? - PullRequest
8 голосов
/ 18 мая 2011

У меня есть JPanel, встроенный в JFrame.JPanel добавляется при CENTER из BorderLayout.Я использую следующий код для рисования, но MouseEvent getX() и getY(), кажется, смещают реальную координату.Почему?

Соответствующий код: -

private Image backBuffer = createImage(getWidth(), getHeight());

public void mouseDragged(MouseEvent e) {
    //System.out.println("Canvas.mouseDragged()");
    Graphics2D g2d = (Graphics2D) backBuffer.getGraphics();
    int x = e.getX(), y = e.getY();
    if(lastCoord == null) {
        g2d.drawRect(x, y, 0, 0);
    } else {
        g2d.drawLine(lastCoord[0], lastCoord[1], x, y);
    }
    lastCoord = new Integer[]{x, y};
    repaint();
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D graphics2D = (Graphics2D) g;
    graphics2D.setColor(Color.black);
    graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);
    graphics2D.drawImage(backBuffer, 0, 0, null);
}

What I mean by offset

1 Ответ

13 голосов
/ 18 мая 2011

Возможно, вы добавили свой слушатель мыши в JFrame (а не на панель), поэтому значения getX и getY относительно JFrame.Тогда смещениями являются границы JFrame и верхняя строка заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...