链接帖子:How to use MouseListener to find a specific cell in a grid
我正在尝试创建一个Battleships游戏,其中10x10网格由100个单元组成。 Grid扩展了JPanel,而Cell也扩展了JPanel。之前我在上面的链接中询问如何实现MouseListener来执行此操作。由于代码全部在该页面上,我只是要引用它。
有人在我接受的链接上发布了一个很好的答案。我现在可以使用MouseListener来检测网格上任何单元格中的移动,点击等。
然而,我又遇到了另一个路障。我正试图将船放在我的网格上。我现在忘记了方向(因为我假设所有的船都将水平放置)。第一艘船将占用五个牢房。我想将光标移动到网格上的一个单元格上,并且还有另外四个“尾部”单元格,光标所在的单元格右侧也会突出显示。如果总共没有五个空闲单元格(可能因为光标太靠近网格边缘),则单元格将变为红色。否则,它们会变绿。
第一艘船放置后,第二艘船需要放置。这是四个细胞长。因此,当悬停在一个单元格上时,它将具有三个单元格的“尾部”,依此类推。
我很高兴如何改变颜色,如何处理方向以及如何从五艘船改为四艘船等等。但是,我不知道如何一次选择多个单元格。 有人知道如何实现这个吗?我很乐意发布我尝试的内容,但实际情况是,我什么都没有。
答案 0 :(得分:1)
通常,选择一行或一列单元格与选择单元格矩形相同。
mouseClicked
方法设置初始单元格。
mouseMoved
方法设置鼠标所在的当前单元格。这样您就可以在视觉上向用户指出哪些单元格已被“选中”。
mouseReleased
方法设置最终单元格。
您检查最终单元格的初始单元格是一行还是一列。行或列的长度决定了您放置的船。这允许您以任何顺序放置船只,而不仅仅是从最大到最小。
您必须添加MouseMoveListener
才能使用mouseMoved
方法。
答案 1 :(得分:1)
使用JButtons / JToggleButtons代替JPanels
您可以使用Icon(一个图像分割成所需的数字)
使用ActionListener(未修饰的)JButton
override ButtonModel for implemented mouse events(不需要/不需要在JButton中添加MouseListner)