【问题标题】:Identifying controls uniquely in an SWT application [duplicate]在 SWT 应用程序中唯一标识控件 [重复]
【发布时间】:2015-03-30 07:13:43
【问题描述】:

如何唯一地识别 SWT 应用程序中的控件?某些控件起初可能处于非活动状态,但后来被激​​活。有没有办法为所有控件识别和分配唯一 ID?

【问题讨论】:

标签: java swt


【解决方案1】:

您可以使用setDatagetData 方法将任意数据与控件关联:

control.setData("id key", "control id");

String id = (String)control.getData("id key");

【讨论】:

  • 这种设置和检索数据的方法工作正常,并且在应用程序开始时调用时运行完美,是否有一种通用的方法来唯一地识别在运行时创建的控件(如弹出外壳)?
  • 没有通用的方法,你必须自己编码。通常不需要这样做。
  • 好的,我已经编写了代码,直到在应用程序开始时设置 ID,但是有没有办法在生成新 shell 时获得警报?就像代码的某些部分创建新外壳时的通知一样?
  • 您可以使用Display.addFilter 监听SWT.Activate 事件以查看新的shell,但此时shell 中的控件可能尚未创建。
  • 好的!我正在尝试检查一个小部件是否具有 ID 或为空,如果它为空,那么我将再次对其调用 setData,你是对的,如果我调用 display.addFilter,外壳中的控件将不会被激活在 SWT.Activate 上
【解决方案2】:

每个 SWT 小部件 (org.eclipse.swt.widgets.Widget) 都有:

获取数据

public Object getData(String key)

返回具有指定名称的接收器的应用程序定义属性, 如果尚未设置,则为 null。 应用程序可能已将任意对象与此接收器相关联 时尚。如果存储在属性中的对象需要被通知时 小部件被释放,应用程序负责挂钩 Dispose 小部件上的事件并执行此操作。

您可以将其与public void setData(String key, Object value) 结合使用

【讨论】:

  • 这样我只能在应用程序开始时获取和设置id,如果我需要设置运行时生成的控件的ID,如弹出shell?
  • 只需再次调用 setData,使用相同的键
  • 键在应用程序启动时处于非活动状态,可能会在运行时根据输入激活。如何以编程方式知道是否已创建新控件,以便我可以在运行时设置 ID 或调用 setData()?
  • 只需阅读我发布的文档:getData() 返回具有指定名称的接收器的应用程序定义属性,如果尚未设置,则返回 null。如果你得到 null 你还没有设置这个属性
  • 好的!所以如果我得到 null 那么可能我必须用键值对设置数据!好的,明白了..非常感谢:)
猜你喜欢
  • 2013-07-05
  • 2011-09-20
  • 2010-09-18
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
相关资源
最近更新 更多