SWT小部件的HTML“getElementByID”实现

时间:2012-07-31 07:50:16

标签: java swt

在HTML中,有document.getElementById("button1");

之类的内容

我想在我的SWT应用程序中发生这种情况。

假设我在new Button(shell, SWT.PUSH)的运行中创建了一个SWT小部件 我可以在任何地方使用与getElementById(...)类似的东西来获取(引用)此对象吗?

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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)查看示例如果您浏览实现,您将了解如何实现此功能...... < / p>

答案 2 :(得分: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 ;
}