在HTML中,有document.getElementById("button1");
我想在我的SWT应用程序中发生这种情况。
假设我在new Button(shell, SWT.PUSH)
的运行中创建了一个SWT小部件
我可以在任何地方使用与getElementById(...)
类似的东西来获取(引用)此对象吗?
我正在考虑创建一个HashMap<String, Object>
类型,其中String放置对象的id(Widget),然后我将调用hashMap.getKey(id)
,它将返回对该对象的引用(Widget)。
答案 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 ;
}