2013-08-19 118 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,則聽起來您只是將鼠標控制器添加爲鼠標偵聽器,但尚未將其添加爲鼠標移動偵聽器。