如何在一定数量的彩色按钮后停止已单击的按钮更改其颜色
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 的代码中缩小,但这是主要思想。
我创建了一个带有按钮网格的战舰 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 的代码中缩小,但这是主要思想。