使用生成的String操作jLabel以引用jLabel

时间:2013-02-26 17:16:37

标签: java string swing jlabel stringbuilder

我有一个由2d int数组组成的网格。

它基本上包含00,01,02等,无需详细说明。

我有一个提取网格位置的方法,然后使用字符串构建器将其更改为“jxy”(x = x网格中的位置,y =网格中的y位置)。

    public String getXYstring() {
        int x = getX();
        int y = getY();
        StringBuilder sb = new StringBuilder();
        sb.append("j");
        sb.append(x);
        sb.append(y);
        String posXY = sb.toString();
        return posXY;
    }

因此,例如,如果x = 1且y = 3,则该方法产生:“j13”。

我所有的jLabel都是这样命名的,网格是8x8所以它们被命名为:j00,j01,j02 ... j07,j10,j11等。

如何使用生成的String操作标签?

例如,如果我想使用setText更改jLabel的文本,我该怎么做?

通常情况如下:

j13.setText("Hello");

但是我希望从我的方法中传入“j13”部分!

同样,我不希望仅限于使用setText,我还需要能够更改标签中的颜色/背景。

我希望这不会让我感到困惑!

1 个答案:

答案 0 :(得分:2)

您不能通过使用字符串来提供变量名称,但更重要的是,您不希望因为变量名称开头并不重要。相反,您可能想要使用JLabel数组(1维或2维)并从数组索引中获取标签或创建并使用HashMap<String, JLabel>

如果使用HashMap,首先需要使用其put方法填充String / JLabel对,然后可以使用String作为键来提取感兴趣的JLabel。

myMap.get("j13").setText("hello");

或在方法中,

public void setLabelText(String labelKey, String text) {
  myMap.get(labelKey).setText(text);
}

您可以称之为:

setLabelText("j13", "Hello);

只是确保所有关键字符串唯一,否则会失败。

关于这个:

  

同样,我不希望仅限于使用setText,我还需要能够更改标签中的颜色/背景。

我建议您不要直接暴露类外部的类字段,而是使用类外部可以调用的公共方法,因为这将使包含私有字段的类更完全地控制外部类可以执行的操作,从而减少有不良副作用的可能性。