使用MouseListener选择网格中的一系列单元格

时间:2013-04-24 15:43:31

标签: java swing jpanel mouselistener

链接帖子:How to use MouseListener to find a specific cell in a grid

我正在尝试创建一个Battleships游戏,其中10x10网格由100个单元组成。 Grid扩展了JPanel,而Cell也扩展了JPanel。之前我在上面的链接中询问如何实现MouseListener来执行此操作。由于代码全部在该页面上,我只是要引用它。

有人在我接受的链接上发布了一个很好的答案。我现在可以使用MouseListener来检测网格上任何单元格中的移动,点击等。

然而,我又遇到了另一个路障。我正试图将船放在我的网格上。我现在忘记了方向(因为我假设所有的船都将水平放置)。第一艘船将占用五个牢房。我想将光标移动到网格上的一个单元格上,并且还有另外四个“尾部”单元格,光标所在的单元格右侧也会突出显示。如果总共没有五个空闲单元格(可能因为光标太靠近网格边缘),则单元格将变为红色。否则,它们会变绿。

第一艘船放置后,第二艘船需要放置。这是四个细胞长。因此,当悬停在一个单元格上时,它将具有三个单元格的“尾部”,依此类推。

我很高兴如何改变颜色,如何处理方向以及如何从五艘船改为四艘船等等。但是,我不知道如何一次选择多个单元格。 有人知道如何实现这个吗?我很乐意发布我尝试的内容,但实际情况是,我什么都没有。

2 个答案:

答案 0 :(得分:1)

通常,选择一行或一列单元格与选择单元格矩形相同。

  • mouseClicked方法设置初始单元格。

  • mouseMoved方法设置鼠标所在的当前单元格。这样您就可以在视觉上向用户指出哪些单元格已被“选中”。

  • mouseReleased方法设置最终单元格。

您检查最终单元格的初始单元格是一行还是一列。行或列的长度决定了您放置的船。这允许您以任何顺序放置船只,而不仅仅是从最大到最小。

您必须添加MouseMoveListener才能使用mouseMoved方法。

答案 1 :(得分:1)

使用JButtons / JToggleButtons代替JPanels