代码之家  ›  专栏  ›  技术社区  ›  JohnnyLambada

Java:在组件中某处松动对象的任何方法吗?

  •  1
  • JohnnyLambada  · 技术社区  · 16 年前

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

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

    4 回复  |  直到 16 年前
        1
  •  1
  •   Bill K    16 年前

    我通常创建一个散列,每当我向屏幕中添加一个组件时,就将其放入(组件、cookie)。当您需要返回cookie对象时(可能是在某个事件中),该事件始终会得到该组件的副本,然后您只是一个离开cookie的get(组件)。

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

        2
  •  3
  •   Tom Hawtin - tackline    16 年前

    JComponent putClientProperty getClientProperty .

        3
  •  1
  •   AdamC    16 年前

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

        4
  •  0
  •   John Gardner    16 年前

    是的,您可以使用get/setname设置某种标识符,然后使用该标识符映射到您的帮助。javahelp csh的工作原理是这样的,除了我相信它是把组件本身放到一个地图中?