0

在 HTML 中,有类似的东西document.getElementById("button1");

我希望在我的 SWT 应用程序中发生这种事情。

假设我在运行时创建了一个 SWT 小部件,new Button(shell, SWT.PUSH) 我可以在任何地方获取(引用)这个对象,类似于getElementById(...)

我正在考虑创建一个HashMap<String, Object>类型,其中 String 放置对象(Widget)的 id,然后我将调用hashMap.getKey(id)它将返回对对象(Widget)的引用。

4

3 回答 3

0

有几种可能性来实现这样的功能,而无需付出任何巨大的努力。作为示例实现,您可以使用 SWTBot(SWT 的 GUI 测试 API),它有多种方法可以通过给定的 id “查找”小部件。

下载 SWTBot 源代码(参见http://wiki.eclipse.org/SWTBot/Contributing#Getting_the_source)并查看示例,org.eclipse.swtbot.swt.finder.SWTBot.buttonWithId(String, String, int)如果您浏览实现,您将了解如何实现。 .

于 2012-07-31T13:11:26.437 回答
0

不,SWT 小部件没有 id 或类似的东西。当然,正如您所说,您可以使用地图手动完成。

于 2012-07-31T10:31:20.500 回答
0

您可以使用类似这样的方法递归检查组合的所有子项,并使用Widget.getData()/setData()设置一个 id:

public <T extends Control> T findChild(Composite parent, String id) {
    Control found = null;
    Control[] children = parent.getChildren();
    for (int i = 0; i < children .length && found == null; i++) {
        Control child = children[i];
        if (id.equals(child.getData(ID)) {
            found = child;
        } else if (child instanceof Composite) {
            found = findChild((Composite) child, id);
        }
    }
    return (T) found ;
}
于 2012-07-31T13:43:50.740 回答