我试图将许多图片导入可见的网格线,以显示为一个条形图(确切地说是健康图形),它会减少(添加白色图像代替条形图的位置)受到伤害。所以我决定不是为10个可能的健康点中的每一个写出代码的chucks(更不用说有其他玩家统计数据将以相同的格式完成),我决定拼凑一个" for&#34 ;循环使用两个if-else
语句,只要健康值大于"for"
循环"i"
,就可以尝试循环来填充每个网格元素。如果玩家的健康状况达到10,那么图像会略有不同,因此需要第二个"if-else"
循环。<p>
我的主要问题涉及我的循环的名称,因为我使用数组作为字符串名称的一种持有者,我希望成为ImageIcon名称,但我没有正确安排代码或找不到源解释如何使用数组字符串名称作为ImageIcon的名称。
这是循环和数据:<p>
String[] array1 ={"hOne","hTwo","hThree","hFour","hFive","hSix","hSeven","hEight","hNine","hTen"};
String tempY = " ", tempN = " ", tempF = " ", tempNF = " ";
//row 1, health
statsPanel.add(stat1);
for (int i=0; i<=9; i++){
if ((i+1)<heal){
tempY=array1[i];
ImageIcon tempY = new ImageIcon("C:\\Users\\Kunkle\\hea.png");
ColorPanel tempYz = new ColorPanel(Color.black, tempY);
statsPanel.add(tempYz);
}
else {
tempN=array1[i];
ImageIcon tempN = new ImageIcon("C:\\Users\\Kunkle\\non.png");
ColorPanel tempNz = new ColorPanel(Color.black, tempN);
statsPanel.add(tempNz);
}
if (i==8 && heal==10){
tempF=array1[i];
ImageIcon tempF = new ImageIcon("C:\\Users\\Kunkle\\shea.png");
ColorPanel tempFz = new ColorPanel(Color.black, tempF);
statsPanel.add(tempFz);
}
else {
tempNF=array1[i];
ImageIcon tempNF = new ImageIcon("C:\\Users\\Kunkle\\shea.png");
ColorPanel tempNFz = new ColorPanel(Color.black, tempNF);
statsPanel.add(tempNFz);
}
}
所有内容都已正确声明变量和导入方式,我得到的唯一3个错误是数据元素所在的四行是在第一个&#34; ImageIcon&#34;之后。在每个新图像的声明中。是否有一种方法可以将代码保持为&#34; for&#34;循环(或几个),但每次传递仍然以新名称引入图像?
答案 0 :(得分:4)
你无法做你想做的事。 Java不是一种动态语言,可以替换名称的变量值,其中$x="a"; $$x=3;
导致变量$a
具有值3
。
您可以做的最接近的事情是使用Map<String,ImageIcon>
将字符串与对象相关联。如果要将ImageIcon
和ColorPanel
与名称相关联,则需要使用包装器对象来保存对这两者的引用,而您需要Map<String,MyWrapper>
。
我会提供代码示例,但这需要查看您尚未提供的statsPanel
代码。我猜是statsPanel
将是(或包含)我上面提到的Map<>
。