private ImageIcon grasslevel0 = new
ImageIcon("/home/vishnu/workspace/game/bin/grasslevel0.png");
JButton k = new JButton("");
k.setIcon("grasslevel"+i);
我需要将字符串"grasslevel"+i
转换为标识符。那可能吗?
如果没有,请提供替代方案。
答案 0 :(得分:3)
您始终需要手动命名标识符。但是您可以使用arraylist来存储对象。
ArrayList<ImageIcon> grassLevel = new ArrayList<ImageIcon>();
grassLevel.add(new ImageIcon("/home/vishnu/workspace/game/bin/grasslevel0.png"));
grassLevel.add(new ImageIcon("/home/vishnu/workspace/game/bin/grasslevel1.png"));
JButton k = new JButton("");
k.setIcon(grassLevel(1));//This sets the image grasslevel1.png as the icon
答案 1 :(得分:1)
private ImageIcon[] grasslevels = new ImageIcon[42];
for (int i = 0; i < grasslevels.length; ++i) {
grasslevels[i] = new ImageIcon("/home/vishnu/workspace/game/bin/grasslevel"
+ i + ".png");
}
JButton k = new JButton("");
k.setIcon(grasslevels[i]);
如果图标数量不固定,请使用List<ImageIcon>
代替[]
,请参阅@Anuswadh的答案;使用grassLevels.add(new ...)
和grasslevels.get(i)
。
这种方法超过理论字符串到标识符的原因是类型安全性;编译器/ IDE可以决定正确性。并支持使用自动完成键入。
答案 2 :(得分:0)
这可能与反射有关,但通常不建议。
private ImageIcon grasslevel0 = new ImageIcon("/home/vishnu/workspace/game/bin/grasslevel0.png");
JButton k = new JButton("");
try {
Class c = this.getClass();
Field f = c.getDeclaredField("grasslevel" + i);
ImageIcon im = (ImageIcon)f.get(this);
k.setIcon(im);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
k.setIcon(im);