2017-04-26 47 views
-3

在Swing應用程序中,當鼠標在框架內移動時,actionPerformed方法停止循環。我怎樣才能解決這個問題?如何在窗格內移動鼠標時修復actionPerformed方法凍結?

這裏是我的方案的基本佈局:

ActionListener taskPerformer = new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      // main game loop 
     } 
} 

public void paintComponent(Graphics g) { 
    // render loop 
} 

我發現a similar question here。用戶發現,通過降低鼠標的輪詢速度,他們解決了問題;但是我無法更改我的蘋果觸控板上的輪詢速率,也沒有提供其他解決方案。此外,這是一個不雅的解決方案,需要用戶更改設置,老實說,必須有更好的方法來解決問題。

基本的問題歸結爲:

  • 有沒有辦法爲我投票率從我的計劃之內的變化?我做了一些研究,但找不到解決方案。
  • 如何禁用鼠標移動事件,以便不會減慢我的遊戲循環? (也可以將它移動到一個單獨的進程中,並使用該進程提供的鼠標x和y位置作爲遊戲循環中的邏輯。)
  • 我可以使用什麼備用解決方案來解決此問題?
+1

發表[MCVE] ... – user1803551

回答

0

我認爲你需要實現「ActionListener的」在那裏你可以帶着它,因爲當你正在將工作的ActionListener,當你將鼠標,這將是已經動作事件。 你也可以得到更多來自: https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.htmlHow can I get the location of the mouse pointer in a JPanel (Without any operation of the Mouse)?

+0

我已嘗試執行,這是不是一個關於如何讓鼠標定位的問題,我問怎麼樣我可以避免延遲問題。我發現的一個解決方案表明,降低鼠標輪詢率解決了這個問題,但由於這是一個不一定可行的優雅解決方案(即在Mac上),我想要求另一種解決方案。我看了,而且我沒有辦法發現用java改變鼠標或觸控板上的輪詢速率。 – Teddy