我正在编写UNO纸牌游戏,我创建了一个带有大小会变化的JButton的数组,JButton代表玩家的手牌以及其中的所有不同牌。首次创建按钮时,一切正常,但是当我添加一张卡并扩展数组时,按钮actionListener损坏了。我认为当第二次创建按钮时,actionListners是在本地而不是全局创建的。我不知道如何解决该问题,所以请帮忙! xd
// playerHandButtons = the array with the buttons that is recreated
// playerHand = a stack that contains the players cards in the hand
// when the array is created for the first time
JButton [] playerHandButtons = new JButton[7];
// you start with 7 cards
public void createArray() {
JButton[] playerHandButtons = new JButton[playerHand.size()];
for (int i = 0; i < playerHandButtons .length; i++) {
playerHandButtons [i] = new JButton("" + playerHand.elementAt(i));
player.add(playerHandButtons [i]);
playerHandButtons [i].addActionListener(this);
}
}
// player = is the panel that displays all the cards
public void createHand() {
player.removeAll();
player.repaint();
player.revalidate();
JButton[] playerHandButtons = new JButton[playerHand.size()];
for (int i = 0; i < playerHandButtons .length; i++) {
playerHandButtons [i] = new JButton("" + playerHand.elementAt(i));
player.add(playerHandButtons [i]);
playerHandButtons [i].addActionListener(this);
}
}
答案 0 :(得分:0)
您的代码存在一些问题。
令我惊讶的是,即使是第一次,该代码也可能起作用,因为JButton[] playerHandButtons = new JButton[playerHand.size()];
方法中的createArray()
创建了一个本地变量,该变量应在您离开该方法后立即进行垃圾回收
如果要保留对创建的 buttons 的引用,则只需使用playerHandButtons = new JButton[playerHand.size()];
,它将为字段playerHandButtons分配一个新数组。
createHand()
方法也要这样做。
也可能有其他解决方案,但是很大程度上取决于 listener 类。