0

我有一个由 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”。

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

如何使用此生成的字符串操作标签?

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

通常它会像:

j13.setText("Hello");

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

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

我希望这不会让我想要达到的目标太混乱!

4

1 回答 1

2

您不能使用字符串来命名变量,但更重要的是,您不想这样做,因为变量名一开始并不那么重要。相反,您可能想要使用 JLabel 数组(一维或二维)并从数组索引中获取标签,或者创建并使用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,我还需要能够更改标签内的颜色/背景。

我建议您不要直接在类之外公开类字段,而是使用外部类可以调用的公共方法,因为这将使持有私有字段的类更完整地控制外部类可以做什么,从而减少不必要的副作用。

于 2013-02-26T17:18:25.013 回答