【问题标题】:How to get Clicked widgets on gwt VerticalPanel?如何在 gwt VerticalPanel 上获取 Clicked 小部件?
【发布时间】:2013-06-01 06:08:02
【问题描述】:

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

【问题讨论】:

    标签: gwt


    【解决方案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
      }
      }
    
    }
    

    【讨论】:

    • 谢谢你的回答兄弟!我不想得到元素。我想获得小部件。我按照您的描述进行了测试,例如 FlexTable table = (FlexTable) event.getSource(); .但我得到了 classCast 异常。我只得到父母 Wiget VerticalPanel 。我不想要它。我想得到的是它的内部或子小部件 FlexTable。怎么弄啊老哥请帮帮我。
    • 哇!现在可以使用您的示例代码!是的,我明白了兄弟。确实非常感谢。我将描述我的代码,引用你的代码......祝你有美好的一天...... :)
    • @Cataclysm 我能理解 :) 很高兴让你出局。祝你项目顺利。
    【解决方案2】:

    真的,我的页面显示了嵌入在 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>");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多