有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

mainLabel1
mainLabel2
...
mainLabel10

和一个基本变量(整数):

int x = 4;

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

mainLabelX.setVisible(true);

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

mainLabelX.setVisible(True);

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


共 (3) 个答案

  1. # 1 楼答案

    您正在混淆对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);
            }
    

    我的建议是给你的标签名打个final private prefix。然后在创建标签的同时简单地添加数字

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

    在任何情况下,您都必须检查哪个标签符合条件,因此您需要一个Map<Integer, Label>

    Map<Integer, Label> labelMap = new HashMap<Integer, Label>():
    ...
    
    Label l = map.get(x);
    l.setVisible(true);
    

    如果将所有标签命名为:mainLabel1mainLabel2,则应向其添加一个字段名,将其保存在List中,并对其进行迭代以获得正确的List

    List<Label> list = new ArrayList<>();
    
    for(Label l: list){
       if(label.getName().equals("aName"))
       l.setVisible(true);
    }
    
    我并不认为后者是一个优雅的解决方案。