2

链接帖子:如何使用 MouseListener 在网格中查找特定单元格

我正在尝试创建一个由 100 个单元组成的 10x10 网格的 Battleships 游戏。Grid 扩展了 JPanel,而 Cell 也扩展了 JPanel。早些时候,我制作了上面的链接,询问如何实现 MouseListener 来做到这一点。由于代码都在该页面上,我只是参考它。

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

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

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

我对如何改变颜色、如何处理方向以及如何从五艘船变为四艘船等感到满意。但是,我不知道如何一次选择多个单元格。有人知道如何实施吗?我很想发布我尝试过的东西,但事实是,我什么都没有。

4

2 回答 2

1

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

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

  • mouseMoved方法设置鼠标所在的当前单元格。这样您就可以直观地向用户指示已“选择”了哪些单元格。

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

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

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

于 2013-04-24T16:34:04.983 回答
1

使用 JButtons / JToggleButtons 而不是 JPanels

于 2013-04-24T16:42:25.663 回答