[英]JButtons don't imediatly change on mouse event
我正在使用java swing庫開發一個稱為DAO的棋盤游戲。
問題在於,在人類玩家移動其動作之后,通過單擊帶有他要播放的棋子圖像的JButton,我調用了計算機AI例程,但在鼠標事件函數內部。 通過僅在函數返回時執行此操作,計算機才結束旋轉,JButton執行刷新圖像(setIcon進來)。
我想知道如何在單擊JButton時(不僅是在鼠標事件函數結束時)強制JButton更改其圖像(因為我需要處理其中的數據)。
我已經嘗試了所有這些
myButtons[i][j].setIcon(xIcon);
myButtons[i][j].revalidate();
myButtons[i][j].repaint();
myButtons[i][j].validate();
沒有用。
Thx提前
所有Swing活動都使用一個線程。
這是過程。
這意味着,如果您需要執行花費超過1/100秒左右的時間的任何操作,則不應執行任何從swing事件開始的線程。 而是生成自己的線程,並將擺動線程返回給系統,以便可以更新GUI。
現在,您的線程一定不能更新任何GUI對象! 如果需要更新GUI對象,請使用invokeLater將代碼放回到AWT線程上。
幾乎可以肯定,新Java程序員不遵守此規則並在AWT線程上執行任務是人們認為Java速度慢的最大原因。
您可能希望嘗試將單擊JButton
執行的操作放入Swing工作器中。 這將允許任務在后台繼續,而用戶仍然可以單擊其他按鈕等。
請參閱http://java.sun.com/docs/books/tutorial/uiswing/concurrency/simple.html 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.