2015-04-01 106 views
0

使用mouseevents,我能够获得框架的x和y坐标,但我无法获取面板的x和y坐标。下面的代码是我得到框架的x和y坐标。获取面板的坐标

public void mouseMoved(MouseEvent e) { 
    x = e.getX(); 
    y = e.getY(); 
    text = Integer.toString(x) +","+Integer.toString(y); 

    Frame.frame.repaint(); 

} 

下面的代码是我试图获得面板的x和y坐标,但它是绘制0代替。 Paint.paint是我的jpanel的名称。我不知道我做错了什么。如果可以的话请帮忙。

public void mouseMoved(MouseEvent e) { 
    x = Paint.paint.getX(); 
    y = Paint.paint.getY(); 
    text = Integer.toString(x) +","+Integer.toString(y); 

    Frame.frame.repaint(); 

} 

回答

2

如果我理解正确的,你的MouseListener与JFrame的注册,以及你希望得到的X/Y相对于包含的JFrame内的JPanel。 MouseEvent中的x和y指的是MouseListener注册的组件。如果你有一个父容器注册的MouseListener,并且得到的MouseEvent相对于子组件的坐标,您可以使用SwingUtilities类的坐标

public void mousePressed(MouseEvent e){ 
    Point childCoordinate = SwingUtilities.convertPoint(parent, e.getPoint(), child); 
} 
+0

转换或我可以只添加的MouseListener到面板, 对?我做到了,而且很有效。但我还有一个问题。我将mouselistener添加到框架和面板,但现在它将为面板设置坐标。不是说我有这个问题,但我只是混淆了为什么它为面板设置它,当我将鼠标监听器添加到jframe和jpanel。 – Ski 2015-04-01 18:39:57

+0

我不知道你是什么意思'设置坐标'。如果两个监听器都设置了相同变量的值,那么最后通知的值将是最终值。 – copeg 2015-04-01 19:38:50

+0

所以如果我做frame.addMouseListener(事件)并把panel.addMouseListener(事件),它会听面板,因为面板是最后一次。好的。我懂了... – Ski 2015-04-01 21:18:41