MouseListener多次调用

dir*_*ndd 4 java swing coordinates mouse-listeners mouselistener

我正在使用此代码来获取放置为jLable图标的图像的X和Y坐标.这个问题的答案提出了获得坐标的方法.

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 );
                }
            });
    }   
Run Code Online (Sandbox Code Playgroud)

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

例如:如果我第三次点击它,那么该System.out.println行的X和Y值将被打印3次.

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

Sri*_*ati 6

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

private void lblMapMouseClicked(MouseEvent evt) 
{
    lblMap.addMouseListener(new MouseAdapter()
    {
        ...
Run Code Online (Sandbox Code Playgroud)

相反,将代码更改为此.

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

它应该解决问题.

希望这可以帮助.


sma*_*jlo 5

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

 System.out.println(this)
Run Code Online (Sandbox Code Playgroud)

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