我想知道如何从gwt VerticalPanel 获取小部件 clickEvent 。 我有一个包含一个或多个子窗口小部件的verticalPanel( FlexTables )。我想使用FlexTable.getCellForEvent(event).getRowIndex();方法。所以,首先我应该首先从VerticalPanel获取FlexTable小部件。我想在这个VerticalPanel上添加addClickHandler或DomHandler,当用户点击它时,我想要检索用户点击的FlexTable小部件。但我不想迭代verticalPanel并在每个FlexTable小部件上添加ClickHandler。如何开发它们?任何建议,将不胜感激。提前感谢您提出我的问题。
答案 0 :(得分: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
}
}
}
答案 1 :(得分: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>");