GWT在不知道Widget名称的情况下访问Widget方法

时间:2009-10-07 08:17:46

标签: gwt scope widget

之前可能已经提出这个问题,但我不知道如何用它来搜索它。

我有一个复合小部件,它有方法来更新组成复合小部件的一些小部件。当我将这个复合小部件添加到我的面板时,我使用do while循环从XML文件中提取数据并填充复合数据。当我每次添加数据时实例化对象时,它都具有do-while循环本地的作用域,并且我无法在稍后调用方法来更新复合小部件中的数据。有没有办法让这些复合小部件或其他解决方案的数组能够访问Widget?

埃里克

3 个答案:

答案 0 :(得分:3)

当然......使用

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

您希望在列表通用中使用自定义类而不是Composite ...没有什么可以阻止您使用窗口小部件创建数据结构,就像您使用任何其他Java类一样。

答案 1 :(得分:2)

如果要将该循环中的所有窗口小部件放入一个面板(可能是ComplexPanel的子类,因为您要向一个面板添加许多窗口小部件),那么您可以使用其中一种方法来访问Widget包含在一个面板中(假设您只将那些XML生成的Widget添加到面板中,仅此而已):

  • com.google.gwt.user.client.ui.ComplexPanel.iterator() - 返回java.util.Iterator<Widget>您可以用来遍历该面板中的Widget列表
  • 可以在for循环中使用
  • com.google.gwt.user.client.ui.ComplexPanel.getWidgetCount()getWidget(int index)来浏览面板中的所有小部件

那么,让我们看一个例子:

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替换为您使用的那个:)

答案 2 :(得分:1)

我绝对建议您观看“构建GWT应用程序的最佳实践”(来自Google I / O 2009):

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

在大约24分钟后,它讨论了如何使用MVP设计模式编写复合小部件 - 尽管你应该全部观看。不幸的是,它没有提供现成的代码snipets,但它确实向您展示了如何构建一个框架来很好地分离您的XML和UI对象。