1

在我的代码中,我使用鼠标坐标与程序进行交互。从那里,必须在鼠标的位置绘制一些东西。但是,Canvas 的 getX()/getY() 方法返回包含 Canvas 的窗口的值,但是当我去绘制时,(0,0) 位于稍微向右和下方(越过条形)窗口的左上角,导致距离正确位置大约 30 个像素。有没有办法调和这些差异,或者我应该简单地全屏显示窗口还是使用其他方法来完全回避问题?

4

2 回答 2

4

我猜你注册了MouseListenerandMouseMotionListener到窗口。将它们注册为Canvas,您将获得相对于该小部件的坐标。请参阅此示例代码

于 2009-12-28T08:38:01.607 回答
1

使用 getX()/getY() 方法,但在 mosueDragged/click 侦听器中,处理事件。

检查此示例(参数):

protected Graphics2D g2;
protected int xStart;
protected int xEnd;
protected int yStart;
protected int yEnd;

//On the parameters, there is the MouseEvent
public void startDrawing(JPanel canvas, MouseEvent evt) {
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    if (g2 == null)

    {
    g2 = (Graphics2D) canvas.getGraphics();
    }

    xStart = evt.getX();
    yStart = evt.getY();
    xEnd = evt.getX();
    yEnd = evt.getY();
}

然后在鼠标按下事件上使用该方法:

 private void canvasMousePressed(java.awt.event.MouseEvent evt) {                                    

    if(penClicked) {
        (penContainer.get(penCount)).startDrawing(canvas, evt);
        (penContainer.get(penCount)).setColor(color);
        penContainer.add(new Pen());
        penCount++;
  }
于 2019-05-05T13:35:47.443 回答