MouseListener多次调用

时间:2013-11-14 15:15:11

标签: java swing coordinates mouselistener mouse-listeners

我正在使用此代码来获取放置为jLable图标的图像的X和Y坐标。 这个获取坐标的方法是通过对此question的回答建议的。

private void lblMapMouseClicked(java.awt.event.MouseEvent evt) {                                    
            lblMap.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    double X = e.getX();
                    double Y = e.getY();
                    System.out.println("X: " + X + "Y: " + Y );
                }
            });
    }   

当我运行此public void mouseClicked(MouseEvent e) { }被多次调用时。 确切地说,我点击图像的次数。

例如:如果我第三次点击它, 来自System.out.println行的X和Y值被打印3次。

随着点击次数的增加,它会增加。 你们任何人都可以解释为什么会这样吗?我该如何解决? :)

3 个答案:

答案 0 :(得分:6)

问题是,当您点击此处时,您将一次又一次地添加新的侦听器。

private void lblMapMouseClicked(MouseEvent evt) 
{
    lblMap.addMouseListener(new MouseAdapter()
    {
        ...

相反,请将代码更改为此。

private void lblMapMouseClicked(MouseEvent e)
{
    double X = e.getX();
    double Y = e.getY();
    System.out.println("X: " + X + "Y: " + Y);
}

它应该解决问题。

希望这有帮助。

答案 1 :(得分:5)

它找我,每次点击图像时都会添加新的鼠标监听器..也可以

 System.out.println(this)

检查实际打印的鼠标侦听器实例

答案 2 :(得分:0)

上面的代码存在问题,就是您每次点击图片都会创建一个新的Mouse事件。

// Create a Mouse pressed Event
mouseLis = new MouseAdapter() {
                        public void mousePressed(MouseEvent e) {
                            actionMenthod(e);
                        }
                   };

这里是将我的事件附加到lblMap。

       lblMap.addMouseListener(mouseLis);

此事件发生后,您必须从lblmap中删除该事件。

      lblMap.removeMouseListener(mouseLis);

当我再次单击时,只有一个事件将出现,然后仅打印一次。