4

我正在使用此代码来获取作为 jLable 图标放置的图像的 X 和 Y 坐标。对this 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 次。

它随着我点击次数的增加而增加。你们中的任何人都可以解释为什么会发生这种情况吗?我该如何解决?:)

4

3 回答 3

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

它应该可以解决问题。

希望这可以帮助。

于 2013-11-14T15:26:19.153 回答
5

在我看来,每次单击图像时都会添加新的鼠标侦听器..也

 System.out.println(this)

检查它实际上是从哪个鼠标侦听器实例打印的

于 2013-11-14T15:20:31.863 回答
0

上面代码的问题是每次单击图像时都会创建新的鼠标事件。

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

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

       lblMap.addMouseListener(mouseLis);

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

      lblMap.removeMouseListener(mouseLis);

当我再次单击时,只有一个事件将在那里,然后它只打印一次。

于 2020-01-27T10:06:22.917 回答