【问题标题】:Manipulating jLabels using a generated String to reference the jLabel使用生成的字符串操作 jLabels 以引用 jLabel
【发布时间】:2013-02-26 17:16:36
【问题描述】:

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

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

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

通常是这样的:

j13.setText("Hello");

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

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

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

【问题讨论】:

    标签: java string swing jlabel stringbuilder


    【解决方案1】:

    您不能使用字符串来命名变量,但更重要的是,您不想这样做,因为变量名一开始并不那么重要。相反,您可能想要使用 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,我还需要能够更改标签内的颜色/背景。

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

    【讨论】:

    • 我不是在尝试用字符串命名变量,而是尝试使用从另一种方法生成的字符串来访问标签函数,例如 setText。
    • @silverzx:很好。您的问题似乎与这一行 j13.setText("hello") 存在争议,这似乎是您尝试使用字符串作为变量名。无论如何,我已经给出了一个可能的解决方案,建议您尝试一下。
    • "j13.setText("hello")" j13 是 jLabels 变量名,这是静态的,不会更改。 jLabel 的内容(例如颜色、文本等)是我希望能够更改的内容,但不必将每个标签名称硬编码到地图或类似内容中,这不是必需的。
    • @silverzx:为什么不使用地图?这肯定比尝试使用硬编码的变量名更好。您可以轻松地创建 JLabels 并将 Map 填充到嵌套的 for 循环中。
    • 我的大脑好痛!我会喘口气,看看你的建议。我主要想操纵颜色,所以我只是在了解使用地图对我和我的应用程序如何工作时遇到了一些麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2012-11-18
    • 2013-02-23
    相关资源
    最近更新 更多