如何获得Canvas(Java)的确切位置

时间:2009-12-28 08:17:35

标签: java canvas location

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

2 个答案:

答案 0 :(得分:4)

我猜你在窗口注册了MouseListenerMouseMotionListener。为Canvas注册它们,您将获得与此窗口小部件相关的坐标。请参阅this sample code

答案 1 :(得分:1)

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

检查此示例(参数):

Objects.requireNonNull(getSupportActionBar()).setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(R.layout.clock);  

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

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();
}