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

How to stop buttons that have been clicked from changing their colour after a certain number of colored buttons

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

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

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

Here's my code

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

board[r][c]=+1
}

button array stores the position of the current button being used while board is supposed to store the position of the ship

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

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

我也不希望按钮在网格上重叠。例如,如果他们 select 潜艇和垂直后放置 4 个红色按钮指示潜艇。如果他们然后 select 一艘像“战舰”这样长度为 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 的代码中缩小,但这是主要思想。