2013-04-18 56 views
0

我正在創建一個程序,並在此刻卡住了,我希望乾旱板的瓦片在突出顯示時發出另一種顏色,但是如果ActionListner不是很好,有人可以幫我嗎?Java - 如何使用鼠標偵聽器高亮顯示正方形。 (使用jframe)

我使用幾個類文件,這裏是每個文件的代碼。

這是uni工作,因爲我正在學習我不想給我的代碼,而是一些片段和有用的建議繼續下去。類文件中的代碼是我認爲由於錯誤而無法編譯的,因爲我不知道如何使用actionlistners或mouselisteners。

總結一下,我需要一個actionlistener,當我的鼠標懸停在遊戲板上時,瓷磚會改變顏色。

因爲我只能發佈2個鏈接我會給這裏3個最短的類文件。

編輯:爲了方便我擺脫了鏈接。 編輯2:我也很抱歉,如果這似乎是一個begginer的問題,以及即時通訊問,因爲我是一個初學者。 編輯3我編輯了Jframe類來接受鼠標監聽器,現在我需要幫助改變瓷磚的顏色,我如何從這個類文件中獲取顏色?

EDIT 4確定我編輯的顏色可變的公共我認爲,如果多數民衆贊成你的意思,也是我加入你的代碼,但我不知道哪個班是我的MouseListener,我不知道如何添加顏色的你已經把它陳述給我。

編輯5好吧我打算讓這個SSCCE不知道我是否能夠做到這一點,這是你的意思嗎?如果是的話,將有可能幫助我?

import java.awt.*; 
import java.util.ArrayList; 
import javax.swing.*; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseEvent; 

public class Board extends JPanel 
{ 

private void setupPieces(int numRows) 
{ 
int numPieces = ((numRows * numRows) - (2 * numRows))/4; 
for (int i = 0; i < numPieces; i++) 


{ 
    DraughtsPiece p = new DraughtsPiece(DraughtsPiece.LIGHT_PIECE_COLOUR); 
    lightPieces.add(p); 

    p = new DraughtsPiece(DraughtsPiece.DARK_PIECE_COLOUR); 
    darkPieces.add(p); 




    DraughtsPiece p = new DraughtsPiece(DraughtsPiece.LIGHT_PIECE_COLOUR); 
    lightPieces.add(p); 

    p = new DraughtsPiece(DraughtsPiece.DARK_PIECE_COLOUR); 
    P.addMouseListener(new <Board.class>); 
    darkPieces.add(p); 

    } 

    public void mouseEntered(MouseEvent m){ 
     ((DraughtsPiece) m.getSource()).color=<highlight color goes here>; 
    } 

    public void mouseExited(MouseEvent m){ 
     ((DraughtsPiece) m.getSource()).color=<normal color goes here>; 
    } 
    } 

    darkPieces.add(p); 
} 

} 

} 
+0

爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

事情是我不知道什麼,我需要的程序功能和做的位即時要求....如果我可以這樣學習,我通常會從演講中得到示例代碼,所以我可以參考(我的學習方式),或者通過從互聯網上學習來觀看演講代碼im不是很好(atm),特別是當我看到的大多數教程都必須過濾所有內容以獲得1個片段並且通常不工作或過時時。而這個SSCCE讓我更難解釋發生了什麼事情。 (無論如何) –

+0

*「如何使用鼠標監聽器突出顯示代碼」*需要大約20-30行代碼,而不是上面提到的「文本牆」。投票結束。 –

回答

1

對於懸停你不想要一個ActionListener。 ActionListeners僅用於JButton,JMenuItem等的點擊。如果實現MouseListener,那麼只要鼠標進入或退出其中一個部分,mouseEntered(MouseEvent)mouseExited(MouseEvent)方法就會被調用。

編輯:在回答您的意見,您可以嘗試在你的DraughtsBoard.setupPieces方法使用此代碼:

編輯2:我想你會需要鼠標懸停後重新繪製,但我不知道,因爲你刪除了很多你的代碼。我已經添加了代碼,以便在單色更改後重新繪製板。

 DraughtsPiece p = new DraughtsPiece(DraughtsPiece.LIGHT_PIECE_COLOUR); 
     lightPieces.add(p); 

     p = new DraughtsPiece(DraughtsPiece.DARK_PIECE_COLOUR); 
     p.addMouseListener(new MouseAdapter(){ 
      public void mouseEntered(MouseEvent m){ 
       ((DraughtsPiece) m.getSource()).color=<highlight color goes here>; 
       DraughtsBoard.this.repaint(); // see my note 
      } 
      public void mouseExited(MouseEvent m){ 
       ((DraughtsPiece) m.getSource()).color=<normal color goes here>; 
       DraughtsBoard.this.repaint(); 
      } 
     }); 
     darkPieces.add(p); 

並使DraughtsPiece.color公開。

注:您只能在像這樣的內聯類中使用DraughtsBoard.this。如果你決定不懶惰,並且實際上有DraughtsPiece實現MouseListener,那麼你將需要其他一些方法來訪問DraughtsBoard,例如一個公共靜態變量,它包含它的實例。

MouseAdapter是MouseListener的擴展,它使所有的擴展類不必從MouseListener實現所有的方法。這意味着我只能實現mouseEntered和mouseExited,並省略MouseListener中其他不需要的方法。

+0

謝謝,雖然我剛剛發現,即時通訊只允許爲深色的方塊做所有這些,但不確定這種變化是否很大?但感謝我試圖實現你目前所說的話。 –

+0

我不確定我是否完全瞭解您的上述評論。如果對任何Java相關的問題有疑問,請務必檢查Oracle的Java教程。這可能會幫助你:http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html – DankMemes

+0

好的謝謝,只是爲了澄清乾旱委員會有2套瓦片的光明和黑暗的教程,我必須使當鼠標懸停在他們身上時,只有深色的瓷磚會變色。這是assigment specficiation「您需要修改 草稿應用程序,以便黑板上的 正方形在鼠標光標經過時更改顏色」 –