如何在gwt VerticalPanel上获得Clicked小部件?

时间:2013-06-01 06:08:02

标签: gwt

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

2 个答案:

答案 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>");