2012-10-23 71 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