0

clickEventが発生したgwt VerticalPanelからウィジェットを取得する方法が至急知りたいです。1 つ以上のサブウィジェット ( FlexTables ) を持つ verticalPanel があります。FlexTable.getCellForEvent(event).getRowIndex(); を使用したい 方法。そのため、まず、VerticalPanel から FlexTable ウィジェットを取得する必要があります。この VerticalPanel に addClickHandler または DomHandler を追加したいのですが、ユーザーがクリックしたときに、ユーザーがクリックした FlexTable ウィジェットを取得したいと考えています。しかし、verticalPanel を反復処理して、各 FlexTable ウィジェットに ClickHandler を追加したくありません。それらを開発する方法は?任意の提案をいただければ幸いです。私の質問に注意していただきありがとうございます..

4

2 に答える 2

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 に答える
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 に答える