所以我有一系列名为card1的jButtons到card20。我想根据是否满足特定条件来更改图标,因此我想制作一个循环并将每个参考为(" card" + i)或类似的东西而不是为每个按钮编写单独的if语句。我在下面添加了使用的代码,但有没有办法循环使用if语句,因此每个代码循环都会影响另一张卡?
private void cardreset() {
if (cardmatch[1] == 0) {
card1.setIcon(back);
}
}
这就是我想要做的,但是添加所有"卡"预先在数组中生成的变量会产生非法的前向引用错误。
private void cardreset() {
for(int i=1; i<=20; i++){
if (cardmatch[i] == 0) {
card[i].setIcon(back);
}
}
}
答案 0 :(得分:2)
您可以将它们放在一个数组中并以这种方式修改它们。
JButton cards[] = { card1, card2, ..., card20 };
然后当你想要修改所有图标时:
if (condition) {
for (JButton card : cards)
card.setIcon(...);
}
或修改特定图标(比如每隔一个图标):
for (int i = 0; i < cards.length; i++)
if (i % 2 == 0)
cards[i].setIcon(...);
答案 1 :(得分:1)
理论上你可以用reflection来做 - 但这是一个非常糟糕的做法。
相反,您应该使用Map<String, Type>
,并使用地图来引用它们。
只是为了它的乐趣,这里有如何用反射来做,但同样,我强烈反对它。
for (int i = 0; i < 4; i ++) {
Field f = MyClass.class.getDeclaredField("card" + i);
System.out.println(f.get(myClass));
}