java使用变量值选择要更改的UI标签
在Java应用程序UI中,有10个带有名称的标签:
mainLabel1
mainLabel2
...
mainLabel10
和一个基本变量(整数):
int x = 4;
假设“x”值在应用程序的执行过程中发生变化,因此该值未知。有时,应用程序需要将其中一个标签的可见性更改为true:
mainLabelX.setVisible(true);
问题 是否有一个简单的解决方案,可以将“x”(示例为4)的值用作标签名称的最后一部分,以便调用setVisible如下所示:
mainLabelX.setVisible(True);
“x”变量的值可以用作标签名称的一部分吗?目前,我使用了很多if语句,它肯定不是唯一/最好的解决方案
# 1 楼答案
您正在混淆对JLabel的引用和这些标签的名称。您可以在运行时动态更改标签的名称——添加/追加任何您想要的内容。但参考文献完全不同
在你的情况下,你有10个标签。因此,制作一个包含10个jlabel的数组
我只是想澄清一下
在上面的mainLabelX中,它不是标签名,而是指向JLabel对象的引用名。如上所述,您可以使用数组进行相同的操作
更新:
根据上述被接受的答案,我提出了一个稍微不同的解决方案
不用维护地图,你可以很好地将更改后的号码附加到标签上。请注意,映射是静态的,这意味着如果数字为4,则其中包含4的标签必须可见。因此,您可以迭代标签数组,并根据名称包含编号的设计要求设置其可见性
我的建议是给你的标签名打个
final private prefix
。然后在创建标签的同时简单地添加数字# 2 楼答案
在任何情况下,您都必须检查哪个标签符合条件,因此您需要一个
Map<Integer, Label>
:如果将所有标签命名为:
我并不认为后者是一个优雅的解决方案。mainLabel1
,mainLabel2
,则应向其添加一个字段名,将其保存在List
中,并对其进行迭代以获得正确的List
:# 3 楼答案
可以使用
List<DefaultKeyValue>
或通过反射为变量调用getter或setter方法关于反思,有很多例子可以说明如何使用: http://tutorials.jenkov.com/java-reflection/index.html