HTML-реализация "getElementByID" для виджета SWT
В HTML есть что-то вроде document.getElementById("button1");
Я хотел бы, чтобы что-то подобное происходило в моем приложении SWT.
Скажем, я создал виджет SWT на ходу с new Button(shell, SWT.PUSH)
Есть ли где-нибудь, где я могу получить (ссылку) этот объект с чем-то похожим на getElementById(...)
?
Я думаю о создании HashMap<String, Object>
типа, где String помещает идентификатор объекта (виджет), а затем я буду вызывать hashMap.getKey(id)
который вернет мне ссылку на объект (виджет).
3 ответа
Нет, у виджетов SWT нет идентификаторов или чего-либо подобного. Конечно, вы можете сделать это вручную, используя карту, как вы говорите.
Вы можете рекурсивно проверить все дочерние элементы композита с помощью метода, подобного этому, и использовать Widget.getData()/setData() для установки идентификатора:
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 ;
}
Есть несколько возможностей реализовать такую функциональность без особых усилий. В качестве примера реализации вы можете использовать SWTBot (API тестирования GUI для SWT), который имеет несколько методов для "поиска" виджетов по заданному идентификатору.
Загрузите исходный код SWTBot (см. http://wiki.eclipse.org/SWTBot/Contributing) и посмотрите, например, на org.eclipse.swtbot.swt.finder.SWTBot.buttonWithId(String, String, int)
Если вы перейдете к реализации, вы получите представление о том, как это можно реализовать...