【问题标题】:Using MouseListener to select a range of cells in a grid使用 MouseListener 选择网格中的一系列单元格
【发布时间】:2013-04-24 15:43:31
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java swing jpanel mouselistener


    【解决方案1】:

    使用 JButtons / JToggleButtons 代替 JPanels

    【讨论】:

    • JToggleButton 在这种情况下特别方便。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多