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) Если вы перейдете к реализации, вы получите представление о том, как это можно реализовать...

Другие вопросы по тегам