2013-04-24 61 views
2

链接后:How to use MouseListener to find a specific cell in a grid使用的MouseListener在网格中选择的单元格区域

我想创建一个战列舰游戏,用由100个细胞的10×10格。网格扩展了JPanel,Cell也扩展了JPanel。早些时候,我做了上面的链接,询问如何实现一个MouseListener来做到这一点。由于代码全部在该页面上,因此我只是要参考它。

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

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

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

我很高兴如何改变颜色,如何处理方向以及如何从五艘船改为四艘船等等。但是,我不知道如何一次选择多个单元格。 有谁知道如何实现这个?我很想发布我所尝试过的,但事实是,我什么都没有。

回答

1

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

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

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

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

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

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

相关问题