是否有一种编程方式来读取GWT页面或Panel包含的所有窗口小部件?
我的表单中有几个错误标签,所有错误标签都以“ErrorLabel”为后缀,我想找到并清除它们。我可以列出它们,但我发现如果我有一些......我可以实际自动化。
我正在使用UiBinder。
答案 0 :(得分:2)
使用
recursion
方法获取任何组件的所有子项。
要遵循的步骤:(如何阅读UiField
名称?)
在gwt.xml中添加以下条目
<inherits name="com.google.gwt.user.Debug"/>
使用debugId
和ui:field
,如下所示ui.xml
<gwt:CheckBox ui:field="myCheckBox" debugId="myCheckBox" />
现在您可以获得ID
myCheckBox.getElement().getId();
使用默认前缀gwt-debug-
生成所有ID,如下所示。如果您愿意,可以将其删除。
gwt-debug-myCheckBox
这是一个实用程序类:
注意:根据您的要求添加更多小部件和组件。
import java.util.Iterator;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
public class WidgetValidator {
private static void validateFlexTable(final FlexTable flextable) {
for (int row = 0; row < flextable.getRowCount(); row++) {
for (int column = 0; column < flextable.getCellCount(row); column++) {
WidgetValidator.validateWidget(flextable.getWidget(row, column));
}
}
}
private static void validatePanel(final Panel panel) {
final Iterator<Widget> iterator = panel.iterator();
while (iterator.hasNext()) {
WidgetValidator.validateWidget(iterator.next());
}
}
public static void validateWidget(final Widget widget) {
if (widget != null) {
if (widget instanceof FlexTable) {
WidgetValidator.validateFlexTable((FlexTable) widget);
} else if (widget instanceof Panel) {
WidgetValidator.validatePanel((Panel) widget);
} else {
System.out.println(widget.getElement().getId().replace("gwt-debug-", ""));
}
}
}
}
答案 1 :(得分:1)
最简单的解决方案是为所有标签添加类名称 - 例如,&#34; errorLabel&#34;,并将以下行添加到CSS文件中:
.hide .errorLabel {display: none}
然后,如果你需要隐藏/显示所有这些标签,你可以用一行代码来完成:
parentPanel.addStyleName("hide");
parentPanel.removeStyleName("hide");
答案 2 :(得分:0)
类似的东西
private void myFunction(RootPanel panel) {
for (Widget w : panel) {
if(w instanceof Label){
//do something
}
}
}