java - 使用生成的字符串来引用 jLabel 来操作 jLabels

标签 java string swing jlabel stringbuilder

我有一个由二维 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等。

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

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

通常情况下会是这样的:

j13.setText("Hello");

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

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

我希望这不会让我想要实现的目标变得太困惑!

最佳答案

您不能使用字符串来指定变量名称,但更重要的是,您不想这样做,因为变量名称一开始并不是那么重要。相反,您可能想要使用 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);

请务必确保所有关键字符串都是唯一,否则将会失败。

关于这一点:

Likewise I don't want this to be restricted to just using setText, I also need to be able to change the colour/background within the label.

我建议您不要直接在类外部公开类字段,而是使用外部类可以调用的公共(public)方法,因为这将使持有私有(private)字段的类更完全地控制外部类可以执行的操作,从而减少出现不良副作用的可能性。

关于java - 使用生成的字符串来引用 jLabel 来操作 jLabels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095241/

相关文章:

java - 如何为 Java 文件构建编译图?

java - Arrays.asList(数组名称).contains(int) 不起作用

java - 无法将SnappyCodec与hadoop jar一起使用:NullPointerException

javascript - Javascript 中高效的美元格式化

c# - 在 CamelCase 字符串之间添加下划线,除了在 LINQ 中继续大写字母

python - 在 python 中打印字符串中的一个单词

Java Swing,从 boolean 值更改文本值

java - 在 JSpinner 中禁用数字分组

java - 如何仅在分隔符之间提取数字?

java - 调用内部类的重绘不会触发paint()实际上什么也不做