如何将String转换为java中的现有标识符?

时间:2013-12-06 14:21:39

标签: java swing

private ImageIcon grasslevel0 = new
    ImageIcon("/home/vishnu/workspace/game/bin/grasslevel0.png");
JButton k = new JButton("");
k.setIcon("grasslevel"+i);

我需要将字符串"grasslevel"+i转换为标识符。那可能吗? 如果没有,请提供替代方案。

3 个答案:

答案 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);