GWT Доступ к методам виджетов без знания имени виджета - PullRequest
1 голос
/ 07 октября 2009

Возможно, об этом спрашивали раньше, но я не знаю, как сформулировать это слово, чтобы найти его.

У меня есть составной виджет, в котором есть методы для обновления некоторых виджетов, составляющих составной виджет. Когда я добавляю этот составной виджет на панель, я использую цикл do while для извлечения данных из файла XML и заполнения составных данных. Когда я каждый раз создаю экземпляр объекта для добавления данных, он имеет локальную область действия для цикла do-while, и я не могу вызвать методы для обновления данных в составном виджете позже. Есть ли способ создать массив из этих составных виджетов или другое решение для доступа к виджету?

Эрик

Ответы [ 3 ]

3 голосов
/ 07 октября 2009

Конечно ... используйте

List<Composite> widgetList = new ArrayList<Composite>();
// loop
widgetList.add(widget);
// end loop
widgetList.get(3).toString();

Вы захотите использовать свой собственный класс вместо Composite в общем списке ... ничто не мешает вам создавать структуры данных с использованием виджетов, как вы это делали бы с любым другим классом Java.

2 голосов
/ 07 октября 2009

Если вы помещаете все свои виджеты в этом цикле на одну панель (предположительно, из подклассов ComplexPanel , так как вы добавляете много виджетов на одну панель), то вы можете использовать один из методов чтобы получить доступ к Widget s, содержащимся на панели (при условии, что вы добавляете только те XML, сгенерированные Widget s на панель и ничего более):

  • com.google.gwt.user.client.ui.ComplexPanel.iterator() - возвращает java.util.Iterator<Widget>, который можно использовать для просмотра списка Widget с в этой панели
  • com.google.gwt.user.client.ui.ComplexPanel.getWidgetCount() и getWidget(int index) могут использоваться в цикле for для просмотра всех виджетов на панели

Итак, давайте рассмотрим пример:

VerticalPanel vPanel = new VerticalPanel();

// Fill up the vPanel using XML

Iterator<Widget> iterator = vPanel.iterator();

while(iterator.hasNext()) {
    Widget w = iterator.next();
    // Do something with w
}

// Or...
for (int i = 0; i < vPanel.getWidgetCount(); i++) {
    Widget w = vPanel.getWidget(i);
    // Do something with w
}

Конечно, замените VerticalPanel на тот, который вы используете:)

1 голос
/ 07 октября 2009

Я определенно рекомендую вам посмотреть «Рекомендации по разработке приложений GWT» (из Google I / O 2009):

http://www.youtube.com/watch?v=PDuhR18-EdM

Примерно через 24 минуты он говорит о том, как писать составные виджеты, используя шаблон проектирования MVP - хотя вы должны смотреть все это. К сожалению, он не предоставляет готовых к использованию фрагментов кода, но он показывает, как создать инфраструктуру для удобного разделения объектов XML и UI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...