之前可能已经提出这个问题,但我不知道如何用它来搜索它。
我有一个复合小部件,它有方法来更新组成复合小部件的一些小部件。当我将这个复合小部件添加到我的面板时,我使用do while循环从XML文件中提取数据并填充复合数据。当我每次添加数据时实例化对象时,它都具有do-while循环本地的作用域,并且我无法在稍后调用方法来更新复合小部件中的数据。有没有办法让这些复合小部件或其他解决方案的数组能够访问Widget?
埃里克
答案 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
列表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对象。