我正在努力创建一个扑克赔率计算器,我在桌子周围设置了8个玩家,带有Jcombobox,其中包含选定量的玩家。我希望做的是在进行多个选择后"重新粉刷" GUI。例如,如果我单击4个玩家,则4个玩家将变得可编辑。目前有效,但是当我选择3个播放器后,播放器4仍然可以编辑。
我试图设置可见性,疲倦地删除了播放器窗格,我尝试了删除(AddPlayer4(,我尝试了其他一些奇怪的事情,但是我能得到的最接近的是完全删除玩家。
addPlayer1.addActionListener((ActionEvent e) -> {
player1.removeAll();
player1.add(playerPanelFactory("Player1",1));
//welcomeScreen.get
repaint();
validate();
});
addPlayer2.addActionListener((ActionEvent e) -> {
player2.removeAll();
player2.add(playerPanelFactory("Player2",2));
getParent().repaint();
// contentPane.repaint();
validate();
});
addPlayer3.addActionListener((ActionEvent e) -> {
player3.removeAll();
player3.add(playerPanelFactory("Player3",3));
getParent().repaint();
// contentPane.repaint();
validate();
});
addPlayer4.addActionListener((ActionEvent e) -> {
player4.removeAll();
player4.add(playerPanelFactory("Player4",4));
repaint();
validate();
});
.....
playerBox.addActionListener((ActionEvent e)-> {
numberOfPlayers = playerBox.getSelectedItem().toString();
int numPlayers = Integer.parseInt(numberOfPlayers);
switch(numPlayers){
case 1:
addPlayer1.doClick();
break;
case 2:
addPlayer1.doClick();
addPlayer2.doClick();
break;
case 3:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
break;
case 4:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
break;
case 5:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
break;
case 6:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
addPlayer6.doClick();
break;
case 7:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
addPlayer6.doClick();
addPlayer7.doClick();
break;
case 8:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
addPlayer6.doClick();
addPlayer7.doClick();
addPlayer8.doClick();
break;
default:
return;
}
});
我不想链接所有代码,因为它几乎是700行,但我相信这是问题所在。我想要实现的目标是在选择时将玩家窗格编辑在窗格时可以编辑,而不是选择时不可编辑。
https://i.stack.imgur.com/slmuz.jpg?我希望这有意义
希望这种改编将有助于解决您的问题。本质上,您每次更改柜台时都会添加许多玩家,并在每次更改中重新添加他们,例如当选择1个播放器时,您会产生播放器1。然后,当选择两个播放器时,您再次产生播放器1和玩家2。也许添加某些检查,以便您不会再次重新创建相同的玩家很好,那么您每次添加的玩家都不必清除他们,尽管只有一个小想法。
有了这个建议,目的是将当前的播放器数与上一个数字进行比较。如果我们添加更多的玩家或保持不变,请按照正常方式继续并更新我们的变量。但是,如果我们要删除一个或多个玩家,请在重新绘制之前删除我们当前的玩家数量和目标球员数量之间的球员。
。示例案例:从7个球员到5名球员。因此,我们要删除新数量的播放器(5( 1,因此6.然后循环循环并删除最后一个播放器7.然后redraw。
我无法在没有代码的情况下对其进行测试,但我希望我的头脑风暴会有所帮助,或者它会给您自己或他人带来一些想法:)希望它也可以实现。如果有人知道这样做的更好的方法,那么我也所有的耳朵都渴望学习我可能出错的地方!:(
int lastNumPlayers;
/*
* SOME CODE
*/
playerBox.addActionListener((ActionEvent e)-> {
numberOfPlayers = playerBox.getSelectedItem().toString();
int numPlayers = Integer.parseInt(numberOfPlayers);
if(numPlayers >= lastNumPlayers) {
switch(numPlayers){
case 1:
addPlayer1.doClick();
break;
case 2:
addPlayer1.doClick();
addPlayer2.doClick();
break;
case 3:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
break;
case 4:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
break;
case 5:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
break;
case 6:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
addPlayer6.doClick();
break;
case 7:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
addPlayer6.doClick();
addPlayer7.doClick();
break;
case 8:
addPlayer1.doClick();
addPlayer2.doClick();
addPlayer3.doClick();
addPlayer4.doClick();
addPlayer5.doClick();
addPlayer6.doClick();
addPlayer7.doClick();
addPlayer8.doClick();
break;
default:
return;
}
lastNumPlayers = numPlayers;
} else {
//Loop through all players between the last number and the new number
for(int i = numPlayers + 1; i <= lastNumPlayers; i++) {
switch(i) {
//Lowest number of players is 1, so lowest check is at 2 (1+1 = 2)
case 2:
player2.removeAll();
break;
case 3:
player3.removeAll();
break;
case 4:
player4.removeAll();
break;
case 5:
player5.removeAll();
break;
case 6:
player6.removeAll();
break;
case 7:
player7.removeAll();
break;
case 8:
player8.removeAll();
}
}
//After removing unused players, redraw screen
repaint();
lastNumPlayers = numPlayers;
}
});