GWT按钮EventListener未触发

时间:2010-03-23 07:51:37

标签: gwt button

我有一个<div id="test"><input type="button" value="OK" /></div> html标记。

我用过:

((HasClickHandlers)RootPanel.get("test").getWidget(0)).addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
    Window.alert('sss');
  }
}

我执行但没有动作。

更新

package com.example.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.*;
import com.google.gwt.user.client.*;
import com.google.gwt.user.client.ui.RootPanel;

public class ExampleWebApp implements EntryPoint {
  public void onModuleLoad() { 
    ((HasClickHandlers) RootPanel.get("test").getWidget(0)).addClickHandler(new ClickHandler() { 
      @Override
      public void onClick(ClickEvent event) {
        Window.alert("i got it");
      }
    });
   }
 }

HTML:

<table>
  <tr>
    <div id="test">
      <input type=button onClick="" value='click here'>
    </div>
  </tr>
</table>

2 个答案:

答案 0 :(得分:2)

GWT Button小部件是button标记,而不是input标记。这意味着在这种情况下您无法使用GWT Button小部件。要使其工作,您需要创建自己的窗口小部件,该窗口小部件可以基于窗口小部件ButtonBase,但需要使用InputElement对象而不是ButtonElement进行初始化。

从html获取标记的下一步是添加类似于大多数小部件中存在的静态wrap方法的内容。以下是inputbutton标记时在您的示例中使用的方式:

Button.wrap(RootPanel.get("test").getWidget(0).getElement()).addClickHandler(
    new ClickHandler() {
       @Override public void onClick(ClickEvent event) { 
          Window.alert('sss');
       }
    });

在这种情况下,您可以在自定义输入窗口小部件中添加wrap方法。请参阅te Button方法的wrap小部件实现,它是相同的,当然期望创建小部件本身。

答案 1 :(得分:1)

您不能只使用html按钮并尝试向其添加点击处理程序。您需要使用gwt代码创建按钮。尝试:

<div id="test"></div>

然后:

Button button = new Button("OK");
RootPanel.get("test").add(button);
button.addClickHandler(new ClickHandler() {...});