java - 为什么MouseEvent的getX() getY() 好像和真实坐标有偏移?

标签 java swing

我在 JFrame 中嵌入了一个 JPanelJPanel被添加到BorderLayoutCENTER。我正在使用以下代码对其进行绘制,但 MouseEventgetX()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

最佳答案

也许您已将鼠标监听器添加到 JFrame(而不是面板),因此 getX 和 getY 值是相对于 JFrame 的。然后偏移量是 JFrame 边框和上标题栏。

关于java - 为什么MouseEvent的getX() getY() 好像和真实坐标有偏移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6040011/

相关文章:

java - 未能在java上制作我自己的绘图小部件

java - 使用 for 循环获取字符串中的最后一个单词?

java - 来自 JAVA 的 Mongo Replicaset 配置

java - Effective Java 的防御副本

java - 在 bean 工厂中找不到持久性异常翻译器。无法执行异常翻译

java - 如何创建泛型?

java - RowFilter RegexFilter - 如何避免整数被转换为带逗号的字符串?

java - "cannot find symbol method drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)"

java - 在 java 中添加对 windows 任务栏的贡献 - 类似于笔记本电脑电池小部件

java - 滚动 JPanel 中的可见内容