2013-08-19 198 views
1

我一直在研究一个基本的塔防游戏,并且正在寻找跟踪鼠标的移动。我不需要在拖动时跟踪鼠标移动,而只是在鼠标悬停在屏幕上时才能看到塔的放置位置。我已经扩展了MouseAdapter来制作一个控制器,然后点击放置塔架,但是我无法确定如何跟踪鼠标移动。应该覆盖mouseMoved做到这一点?我尝试了一点成功。在发表印刷声明后,我可以看到事件并未发生。这是我目前有:在java中跟踪鼠标移动

public class MouseController extends MouseAdapter { 

    private final Board my_board; 

    private final int square_size; 

    public MouseController(final Board the_board, final int the_square_size) { 
     my_board = the_board; 
     square_size = square_size; 
    } 

    @Override 
    public void mouseClicked(final MouseEvent e) { 
     super.mouseClicked(e); 
     Point p = e.getPoint(); 
     my_board.placeTower(p.x/square_size, p.y/square_size - 1); 
    } 

    @Override 
    public void mouseMoved(final MouseEvent e) { 
     super.mouseMoved(e); 
     Point p = e.getPoint(); 
     my_board.placeCursor(p.x/square_size, p.y/square_size - 1); 
    } 
} 

任何帮助表示赞赏。谢谢!

+0

尝试取出最终的MouseEvent e。它应该只是MouseEvent e – user2277872

+1

@ user2277872不应该有所作为,事实上,它可以争辩说,它是更正确的(有最后的)作为对象的参考不会改变 – MadProgrammer

+0

我实际上告诉我的一个教授们最后应该几乎总是用在方法参数上。无论如何,我没有将控制器同时作为mouseListener和MouseMotionListener进行添加。我之前犯过这个错误。不管怎么说,多谢拉。 – eatinasandwich

回答

2

这里有一个官方教程做的正是你想做什么:http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html

这里是内联的相关片段:

public class MouseMotionEventDemo extends JPanel 
            implements MouseMotionListener { 
    //...in initialization code: 
     //Register for mouse events on blankArea and panel. 
     blankArea.addMouseMotionListener(this); 
     addMouseMotionListener(this); 
     ... 
    } 

    public void mouseMoved(MouseEvent e) { 
     saySomething("Mouse moved", e); 
    } 

    public void mouseDragged(MouseEvent e) { 
     saySomething("Mouse dragged", e); 
    } 

    void saySomething(String eventDescription, MouseEvent e) { 
     textArea.append(eventDescription 
         + " (" + e.getX() + "," + e.getY() + ")" 
         + " detected on " 
         + e.getComponent().getClass().getName() 
         + newline); 
    } 
} 
0

你如何你MouseController添加到您的代码?我认为MouseAdaptor实现了MouseListener和MouseMotionListener。请务必致电component.addMouseMotionListener(myMouseController),而不是只有component.addMouseListener(myMouseController)。 如果仅调用mouseClicked而不调用mouseMoved,则听起来您只是将鼠标控制器添加为鼠标侦听器,但尚未将其添加为鼠标移动侦听器。