swing组件的name属性的用途是什么?它是在内部使用摆动吗?
背景:一位同事通过在name属性中存储文本字符串的键来实现国际化机制。然后,他只需遍历所有swing元素并获取存储在组件的name属性中的密钥。他认为名称属性似乎没有被使用,并且这是最简单的方法。
答案 0 :(得分:8)
来自javadoc的组件名称“设置或获取组件的名称。当您需要将文本与不显示文本的组件关联时,这非常有用。”所以我觉得使用这个名字很好。
您也可以在组件的属性中放置一些东西。
答案 1 :(得分:3)
它是否在内部使用摆动?
简短回答:是的。
更长的答案:相当容易验证 - 只需构建一些ui并走在树上。或者看看f.i. SwingLabs-Demo(无法抗拒:-),
接下来的问题是:为了应用原因,Swing内部设置是否会影响设置名称?
简短回答:很难说,很可能不是
更长的答案:我看到的内部设置不太可能因应用程序需求而被覆盖,因为它们深深隐藏在容器层次结构中。事实上,像f.i这样的一些框架。 SAF确实使用该名称进行资源注入(类似于您所描述的同事正在做的事情)。我自己的(未维护的)FormBuilder框架用于布局约束。
name属性的模糊(读取:未定义)定义既是优势又是陷阱:
答案 2 :(得分:2)
根据我的经验,我在设置Swing组件的名称时从未遇到任何问题。对于“leaf”Swing组件(您可以直接使用,例如JLabel
,JButton
,JMenu
...),name
始终保留null
摆动。
正如@kelopatra所提到的,“复杂”Swing组件的内部组件(例如JColorChooser
)可能已为其分配了名称,但您通常无法直接访问这些内部组件(除了遍历copmponent层次结构树)
根据name
属性的用法,它通常用于资源注入(i18n),但它对于UI自动化(用于测试或演示)也非常有用,因为大多数机器人(例如FEST Swing) )只要您为组件指定了唯一的名称,就可以按名称查找组件。