我的匿名内部类鼠标适配器正在自己做事

时间:2015-08-29 05:00:12

标签: java repeat mouselistener anonymous-inner-class

这不是第一次单独执行代码的部分,我无法理解原因。我已经运行了调试器,然后它似乎又回到了随机的代码行。

在这种情况下,它会完成MouseAdapter中的所有代码,但后来又回到if(boundaryIndex==1)... - 甚至不是if(me.getSource()==backBtn) - 并且它会重复执行以下代码,直到boundaryIndex等于1然后代码结束。

MouseAdapter ma = 
  new MouseAdapter()
  {

...

     public void mouseClicked(MouseEvent me)
     {

...

if(me.getSource()==backBtn) // this statement is called repeatedly.
{
   if(boundaryIndex==1)
   {
      backBtn.setIcon(backDisabled);
      for(MouseListener l : backBtn.getMouseListeners())
          backBtn.removeMouseListener(l);
   }
   boundaryIndex--;
   restoreBackground();
   try{
      for (int b : map.territories.get(boundaryIndex).getBorders())
          img.getGraphics().drawImage(
              blueIco,
              map.territories.get(b).getPoint().x - blueIco.getWidth() / 2,
              map.territories.get(b).getPoint().y - blueIco.getHeight() / 2,
              null);
   } catch(Exception e) {}
   img.getGraphics().drawImage(
       redIco,
       map.territories.get(boundaryIndex).getPoint().x - redIco.getWidth() / 2,
       map.territories.get(boundaryIndex).getPoint().y - redIco.getHeight() / 2,
       null);
   background.repaint();
}

...

    }
};

我希望我能更好地解释这一点,但我不理解它。它违背了我所知道的关于Java的一切。没有循环,它真的,实际上,认真地,跳转到一行代码。它很棒。它从if语句的INSIDE开始,并且在第一次运行后甚至不检查if语句。它从字面上开始就在它的中间。

1 个答案:

答案 0 :(得分:0)

我在for循环中添加了鼠标监听器。事实证明,组件被多次给予相同的鼠标监听器。问题解决了。