如何在一定数量的彩色按钮后阻止已单击的按钮更改其颜色

问题描述

我创建了一个战舰 GUI 程序,带有一个按钮网格,然后我创建了一堆单选按钮来选择用户想要放置在网格上的船只 一旦用户选择了一个单选按钮,他们就可以改变网格上按钮的颜色。即定位船

我的问题是,一旦用户选择了一个单选按钮,他们就可以随心所欲地更改网格按钮的颜色。

我还希望他们只能更改与他们最初选择的按钮颜色接近的按钮颜色(仅限垂直和水平)

这是我的代码

public void actionPerformed(ActionEvent evt){
if(submarine.isSelected())
{
button[r][c].setBackground(Colour.green)

board[r][c]=+1
}

button 数组存储当前使用的按钮的位置,而 board 应该存储船的位置

编辑:当我运行程序时,我有一个代表棋盘的网格。然后我制作了一个代表船舶(潜艇、巡洋舰、驱逐舰和战舰)的第 4 组单选按钮和另一个代表方向(垂直或水平)的组

如果玩家选择了一个单选按钮,例如“潜艇(长度为 4)和垂直”,则按下该按钮,并且接下来 3 的颜色在案例中变为“红色”。现在我希望玩家能够一次在网格上定位一艘船。在我的示例中,在用户放置潜艇(垂直 4 个红色按钮)后,他们应该只能更改位置,即在网格上创建一组新的 4 个红色按钮(如果他们希望更改船只位置),这意味着以前的选定的按钮被清除。

我也不希望按钮在网格上重叠。例如,如果他们在放置指示潜艇的 4 个红色按钮后选择潜艇和垂直。如果他们然后选择一艘新船,例如“战舰”,长度为 6 。新按钮不应与之前的潜艇重叠

希望这能澄清事情。如果你还是不明白,请告诉我

解决方法

如果我理解正确,也许可以尝试重新设计您的逻辑:

现在,您为特定长度的特定船只选择一个位置。但是为什么你需要为你的船选择更多的位置?

相反,还有两个单选按钮将确定船舶的方向:一个用于水平方向,另一个用于垂直方向。这样,当玩家选择一个位置时,按钮会自动在水平或垂直方向突出显示,当然也会突出显示正确的数量。示例:选择了长度为 4 的船并选择了水平方向。现在玩家在网格上选择 3、2(假设 3 是第三行,2 是第二列)。 3、3; 3、4; 3,5 还突出显示红色以及所选择的以显示船舶将位于的位置。

要突出显示正确的数量,您可以使用 for 循环。 循环选定船的长度,然后增加列 c,如果选择水平或行,r,如果选择垂直,并将所有这些按钮设置为红色,即

Button currentButton = null;
for(int i = 0; i<ship.length; i++){
    if(horizontalOrientation.isSelected())
        currentButton = button[selected r][selected c + i];
        if(currentButton.getMarked == true){
            currentButton.setBackground(Color.RED);
            break;
        }
        else{
            currentButton.setBackground(Color.GREEN);
            currentButton.setMarked(true);
        }
    else
        //same code but for vertical orientation (and incrementing r instead)
}

我确信上面的代码可以从所有 if else 的代码中缩减,但这是主要思想。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...