我想紧急知道如何从发生clickEvent的 gwt VerticalPanel获取小部件。我有一个带有一个或多个子小部件(FlexTables)的verticalPanel。我想使用 FlexTable.getCellForEvent(event).getRowIndex(); 方法。所以,首先我应该首先从 VerticalPanel 获取 FlexTable 小部件。我想在此 VerticalPanel 上添加 addClickHandler 或 DomHandler ,当用户单击它时,我想检索用户单击的 FlexTable 小部件。但我不想在verticalPanel 上进行迭代并在每个FlexTable 小部件上添加ClickHandler。如何开发它们?任何建议,将不胜感激。提前感谢您对我的问题的关注..
问问题
628 次
2 回答
1
真的,我的页面显示了嵌入在 VerticalPanel 中的 FlexTables 列表。这些 flexTables 是动态插入的,并且在第一列中有复选框。我的麻烦是,当用户单击任何表格并且我想在该行中设置复选框以进行选择时。当用户再次点击它时,该行中的复选框将被取消选中。这是我的代码......
view.getResultPanel().addDomHandler(new ClickHandler() {
public void onClick(final ClickEvent event) {
VerticalPanel vpanel = (VerticalPanel) event.getSource();
for (int i = 0; i < vpanel.getWidgetCount(); i++) {
Widget childWidget = vpanel.getWidget(i);
if (childWidget instanceof FlexTable) {
FlexTable table = (FlexTable) childWidget;
if (table.getCellForEvent(event) != null) { // that will avoid invalid table (that not clicked )
int currentRowIndex = table.getCellForEvent(event).getRowIndex();
Element elem = table.getCellFormatter().getElement(currentRowIndex, 0);
if ("td".equalsIgnoreCase(elem.getTagName())) {
elem = elem.getFirstChildElement();
}
if ("center".equalsIgnoreCase(elem.getTagName())) {
elem = elem.getFirstChildElement();
}
boolean isChecked = false;
if ("".equalsIgnoreCase(elem.getAttribute("checked"))) {
elem.setAttribute("checked", "on");
isChecked = true;
}
else if ("on".equalsIgnoreCase(elem.getAttribute("checked"))) {
elem.removeAttribute("checked");
}
if (isChecked) {
// Do Something
}
}
}
}
}
}, ClickEvent.getType());
在 UI 视图中......我像这样创建了这个复选框..
flxResultTable.setHTML(0, 0, "<center><input type = 'checkbox'/></center>");
于 2013-06-01T09:04:01.060 回答
1
你可以通过ClickEvent event
public void onClick(final ClickEvent event) {
VerticalPanel vp = (VerticalPanel) event.getSource();
Iterator<Widget> vp = verP.iterator();
while (vPanelWidgets.hasNext()){
Widget childWidget = vPanelWidgets.next();
if (childWidget instanceof FlexTable) {
...do stuff with childWidget
}
}
}
于 2013-06-01T06:53:21.290 回答