Java:在Component的某个地方有任何关于Component的对象的方法吗?

时间:2008-10-22 19:39:27

标签: java awt

作为我的question about the java.awt.Component.getName() property的后续内容,我想知道是否有一种方法可以在组件中的某个地方捕捉任意对象,类似于tag property in .NET?对于任何对组件起作用但不一定知道该组件是什么的代码,这将非常方便。

例如,假设我正在尝试实现一个应用程序范围的帮助系统,该系统知道要查看鼠标当前指向的任何组件,进入该组件并提取其帮助文本并将其显示在其自己的窗格中在屏幕上(不,我不想使用工具提示)。我当前的答案是使用Name(getName()/ setName())来存储帮助文本,这将起作用,但Name必须是一个字符串。如果我想获得更好的东西并存储除了字符串以外的任何东西,我想我会被卡住。

4 个答案:

答案 0 :(得分:3)

JComponentputClientPropertygetClientProperty

答案 1 :(得分:1)

组件没有办法做到这一点。但是,一种选择是使用静态映射并在其周围提供包装,以便您可以查询与任何UI(或其他)对象相关的数据。我以前做过这种事情,只要你把它设置为一种带接口的服务,它就会非常优雅并且不会破坏你的OO设计。

答案 2 :(得分:1)

每当我向屏幕添加组件时,我通常会创建一个哈希并放置(组件,cookie)。当你需要你的cookie对象时(可能在一个事件中),事件总是获得组件的副本,然后你只是远离你的cookie(组件)。

在某些极端条件下,我已经将控件子类化,只是添加了一个字段。这是一个快速而肮脏的修复,因为子类化组件就像几行代码,并且可以在生成屏幕的文件所在的同一类中。这仅在您需要存储连接到单一类型控件的数据时才有用。

答案 3 :(得分:0)

是的,您可以使用get / setName设置某种标识符,然后使用该标识符映射到您的帮助。 JavaHelp CSH的东西有点像那样,除了我相信将组件本身放到地图中?