0

我想紧急知道如何从发生clickEvent的 gwt VerticalPanel获取小部件。我有一个带有一个或多个子小部件(FlexTables)的verticalPanel。我想使用 FlexTable.getCellForEvent(event).getRowIndex(); 方法。所以,首先我应该首先从 VerticalPanel 获取 FlexTable 小部件。我想在此 VerticalPanel 上添加 addClickHandler 或 DomHandler ,当用户单击它时,我想检索用户单击的 FlexTable 小部件。但我不想在verticalPanel 上进行迭代并在每个FlexTable 小部件上添加ClickHandler。如何开发它们?任何建议,将不胜感激。提前感谢您对我的问题的关注..

4

2 回答 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 回答