我正在学习Java和Im创建一个记忆类型的游戏,你必须找到两张相同的牌。
我创建了一个Window等等,但我的问题是添加多个JButton。 (我的卡是带图标的JButtons)。我已经在我的问题所在地评论了我的代码。
//Get the images.
private File bildmapp = new File("bildmapp");
private File[] bilder = bildmapp.listFiles();
//My own class extending JButton
Kort[] k = new Kort[bilder.length];
for(int i = 0; i < bilder.length; i++){
k[i] = new Kort(new ImageIcon(bilder[i].getPath()));
}
//Later in my code:
int sum = rows * columns;
Kort[] temp = new Kort[sum];
//My function to randomize.
Verktyg.slumpOrdning(k);
//***********************//
//Trying to fill a array from K (which contains all cards) so my temp contains SUM cards and SUM/2 pairs
for(int i = 0; i < sum/2; i++){
temp[i] = k[i];
temp[i+sum/2] = k[i];
}
//Problem is that i only get SUM/2 (half of the cards) cards, not the 16 (8 pairs) i would like to add in this case
//SYNLIGT = VISIBLE.
for(int i = 0; i < sum; i++){
temp[i].setStatus(Kort.Status.SYNLIGT);
j.add(temp[i]);
}
答案 0 :(得分:4)
您的代码最终会将每个Kort
对象添加到容器两次,因为数组temp
包含对每个Kort
的两个引用。当您第二次添加Kort
时,它会移动到第二个位置。 Component
一次只能出现在一个地方。
答案 1 :(得分:2)
您可能无法两次添加相同的小部件。您需要两个单独的按钮(但您可以在两个按钮上使用相同的图标)。
答案 2 :(得分:0)
您必须创建sum
JButton对象而不是sum/2
;否则2个按钮是相同的,因此只显示一次。