Java 使用变量值选择要更改的UI标签

Java 使用变量值选择要更改的UI标签,java,function,variables,object,Java,Function,Variables,Object,在Java应用程序UI中,有10个带有名称的标签: mainLabel1 mainLabel2 ... mainLabel10 和一个基本变量(整数): 假设“x”值在应用程序的执行过程中发生变化,因此该值未知。在某一点上,应用程序需要将其中一个标签的可见性更改为true: mainLabelX.setVisible(true); 问题 是否有一个简单/简单的解决方案,将“x”(示例为4)的值用作标签名称的最后一部分,以便调用setVisible如下所示: mainLabelX.setVis

在Java应用程序UI中,有10个带有名称的标签:

mainLabel1
mainLabel2
...
mainLabel10
和一个基本变量(整数):

假设“x”值在应用程序的执行过程中发生变化,因此该值未知。在某一点上,应用程序需要将其中一个标签的可见性更改为true:

mainLabelX.setVisible(true);
问题 是否有一个简单/简单的解决方案,将“x”(示例为4)的值用作标签名称的最后一部分,以便调用setVisible如下所示:

mainLabelX.setVisible(True);

“x”变量的值是否可以用作标签名称的一部分?目前,我使用了很多if语句,它肯定不是唯一/最好的解决方案。

您可以使用
列表
,或者通过反射,您可以为变量调用getter或setter方法

对于反射,有许多示例可以使用:

您正在混淆对JLabel的引用和这些标签的名称。您可以在运行时动态更改标签的名称-添加/追加任何您想要的内容。但参考文献完全不同

在你的情况下,你有10个标签。因此,创建一个包含10个jlabel的数组

    JLabel[] myLabels = new JLabel[10];
    int i = 0;
    for(JLabel label : myLabels) {
        label = new JLabel();
        label.setName("label" + i);  //here i can be dynamically changed at runtime
        i++;
    }
我只是想澄清一下

mainLabelX.setVisible(True);
在上面的mainLabelX中,不是标签名,而是指向JLabel对象的引用名。如上所述,您可以将数组用于相同的目的

更新:

根据上述被接受的答案,我提出了一个稍微不同的解决方案

不用维护地图,您可以很好地将更改的编号附加到标签上。请注意,映射是静态的,这意味着如果数字为4,则其中包含4的标签必须可见。因此,您可以迭代标签数组,并根据名称包含编号的设计要求设置其可见性

        if(label.getName().contains(String.valueOf(yourInteger))) {
            label.setVisible(true);
        }
我的建议是为您的标签名设置一个
最后的私有前缀。然后,只需在创建标签时向其添加数字即可

    private final String labelPrefix = "label";
    for(JLabel label : myLabels) {
        label = new JLabel();
        label.setName(labelPrefix + i);
        i++;
    }

在任何情况下,您都必须检查哪个标签符合条件,因此您需要一张
地图


我不认为后者是一个优雅的解决方案。

他必须另外检查正确的名字,因为引用的名称与字段名无关。谢谢你的回答,但我是指实际的引用,名字永远不会改变,但是我需要引用其中的一个标签,不知道确切是哪个。对不起,问题不清楚@arjacsoh引用的名称和字段名无关,我不同意。您只需在运行时通过调用引用上的getter/setter方法来获取和设置JLabel名称。虽然OP的意图是引用名称,但您的声明是不正确的。当您在更新中写入它时,它会正确执行任务。OP奇怪地想根据引用的名称调用该方法,但无论如何都不优雅。我很好奇,就我所知,这种保持优雅的函数/简单解决方案在C语言中是否存在。我正在编写我的应用程序,以消除这种需要。感谢大家的帮助。这似乎是迄今为止最好(最准确)的答案。谢谢,我要试一试!
    private final String labelPrefix = "label";
    for(JLabel label : myLabels) {
        label = new JLabel();
        label.setName(labelPrefix + i);
        i++;
    }
Map<Integer, Label> labelMap = new HashMap<Integer, Label>():
...

Label l = map.get(x);
l.setVisible(true);
List<Label> list = new ArrayList<>();

for(Label l: list){
   if(label.getName().equals("aName"))
   l.setVisible(true);
}