我有一个由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,我还需要能够更改标签中的颜色/背景。
我希望这不会让我感到困惑!
答案 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,我还需要能够更改标签中的颜色/背景。
我建议您不要直接暴露类外部的类字段,而是使用类外部可以调用的公共方法,因为这将使包含私有字段的类更完全地控制外部类可以执行的操作,从而减少有不良副作用的可能性。