2012-10-23 70 views
0

現在我需要寫一個8-益智遊戲,它看起來[像這樣]二維陣列和一個JButton

enter image description here

教授問我們寫三個不同的類別,這是Piece.java,EightPuzzle .java和EightPuzzlePanel.java。 正如你所看到的, Piece.java代表每個獨立的棋子,像這個拼圖板中的「1」,「2」 EightPuzzle.java代表拿着這9個部件/按鈕的遊戲板。 EightPuzzlePanel.java是GUI的東西。

所以我的問題是,因爲我們需要創建一個Piece [] [] piece = new Piece [] [],一個2D數組,並且我們還需要在棋盤上安排這些棋子。我以爲我可以創建9個JButton,並將二維數組與9個JButton鏈接(或者有更好的方法來對2D數組進行排序),但是我不知道如何去做。

此外,按鈕需要鼠標和鍵盤控制。這對我來說是另一個挑戰。

+1

首先查看[佈局管理器視覺指南](http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html),然後查看[使用佈局管理器] (http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html)。一點提示。對於實際的拼圖板,我可能會使用'GridLayout'。 – MadProgrammer

+0

*「所以我的問題是......」* ..究竟是什麼? ('挑戰'不是'問題')。 –

+0

我已經設置了網格佈局,但我的問題是如何將2d數組與我的JButton鏈接,但不能直接設置2D JButton。挑戰是問題的第二部分,我想先解決二維數組問題。謝謝 – JavaLeave

回答

2

因爲這是我的功課不會進入太多細節,但是這是我會怎麼做呢:

  1. Piece擴展JButton類。 Piece對象將顯示文本並顯示您想要呈現的圖像的位置。你應該能夠在網上找到很多關於如何將圖像添加到JButton的示例。
  2. 品牌EightPuzzle延伸JPanel類,並且還使用Grid Layout整齊地呈現在網格中。這個類將呈現一個二維數組,然後它將呈現它們的Piece對象。
  3. 品牌EightPuzzlePanel也延伸JPanel類。這個類需要另一個JPanel(EightPuzzle)並附加其他可能需要的按鈕。
  4. 最後創建一個Main類,它擴展JFrame,然後我將EightPuzzlePanel添加到它(它應該包含另一個按鈕的其他面板)。
+0

謝謝。這很有道理。我會開始按照你的指示! – JavaLeave

+0

@凱利安:不用擔心。作爲一個提示雖然(這已被推薦),我會拋棄二維數組,並使用一個集合。將按鈕顯示爲網格是由佈局管理器處理的。既然你看起來需要一些隨機播放功能,那麼這個集合稍後會很方便。此外,對於事件監聽器,請查看[這裏](http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html)鼠標監聽器和[這裏](http://docs.oracle.com) .com/javase/tutorial/uiswing/events/keylistener.html)。 – npinti

+0

嗨,我有關於片類的問題。正如你所說,我需要爲Piece擴展JButton類,所以我需要實現ActionListener呢?我認爲EightPuzzlePanel包含了所有的圖形用戶界面,但其他兩個類似內部函數。我不是很明白 – JavaLeave

0

對於鼠標和鍵,您需要設置一些動作監聽器。

對於這個問題,你可以使用一維數組。只要你有9個存儲在你的數組中,你可以用你layout manager把它們放在正確的位置 - 然後遍歷數組很簡單。

+0

謝謝,我確實設置了鼠標,鍵和動作監聽器。但是這個hw需要二維數組。對於鼠標和鍵盤監聽器,你介意給我一些關於算法的提示嗎?我真的不知道如何通過鼠標和鍵移動按鈕。 – JavaLeave