1

作为我关于 java.awt.Component.getName() 属性的问题的后续,我想知道是否有一种方法可以在 Component 的某处放置任意对象,类似于.NET 中的 tag 属性?对于对组件有效但不一定知道该组件是什么的任何代码,这将非常方便。

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

4

4 回答 4

3

JComponentputClientPropertygetClientProperty

于 2008-10-23T13:30:12.023 回答
1

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

于 2008-10-22T19:45:18.333 回答
1

每当我将组件添加到屏幕时,我通常都会创建一个哈希并放置(组件,cookie)。当您需要返回 cookie 对象时(可能是在某个事件中),该事件总是会获取组件的副本,然后您就只是远离 cookie 的一个 get(component) 而已。

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

于 2008-10-22T20:51:33.583 回答
0

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

于 2008-10-22T20:38:56.527 回答