摆动组件的名称属性是什么?

时间:2012-01-05 10:32:17

标签: java swing properties

swing组件的name属性的用途是什么?它是在内部使用摆动吗?

背景:一位同事通过在name属性中存储文本字符串的键来实现国际化机制。然后,他只需遍历所有swing元素并获取存储在组件的name属性中的密钥。他认为名称属性似乎没有被使用,并且这是最简单的方法。

3 个答案:

答案 0 :(得分:8)

来自javadoc的组件名称“设置或获取组件的名称。当您需要将文本与不显示文本的组件关联时,这非常有用。”所以我觉得使用这个名字很好。

您也可以在组件的属性中放置一些东西。

答案 1 :(得分:3)

  

它是否在内部使用摆动?

简短回答:是的。

更长的答案:相当容易验证 - 只需构建一些ui并走在树上。或者看看f.i. SwingLabs-Demo(无法抗拒:-),

  • 单击JXTree演示任务,查看由Swing设置的简单JFrame的某些子项的名称(显示在treenode,括号中)。
  • 将LAF更改为Nimbus,单击JXTreeTable演示任务,将鼠标移到treeTable的scrollBar上,并查看LAF设置的scrollBar按钮名称

接下来的问题是:为了应用原因,Swing内部设置是否会影响设置名称?

简短回答:很难说,很可能不是

更长的答案:我看到的内部设置不太可能因应用程序需求而被覆盖,因为它们深深隐藏在容器层次结构中。事实上,像f.i这样的一些框架。 SAF确实使用该名称进行资源注入(类似于您所描述的同事正在做的事情)。我自己的(未维护的)FormBuilder框架用于布局约束。

name属性的模糊(读取:未定义)定义既是优势又是陷阱:

  • adv:是的,任何代码都可以使用它,它没有真正的合同
  • 陷阱:该属性可能有许多竞争用户

答案 2 :(得分:2)

根据我的经验,我在设置Swing组件的名称时从未遇到任何问题。对于“leaf”Swing组件(您可以直接使用,例如JLabelJButtonJMenu ...),name始终保留null摆动。

正如@kelopatra所提到的,“复杂”Swing组件的内部组件(例如JColorChooser)可能已为其分配了名称,但您通常无法直接访问这些内部组件(除了遍历copmponent层次结构树)

根据name属性的用法,它通常用于资源注入(i18n),但它对于UI自动化(用于测试或演示)也非常有用,因为大多数机器人(例如FEST Swing) )只要您为组件指定了唯一的名称,就可以按名称查找组件。