我现在坐在这上面4个小时了,我再一次在Stackoverflow上,因为我无法解决这个(简单)问题。
我想点击一个按钮时触发一个方法,Google给出了一个如下例子:
// Listen for mouse events on the Add button.
addStockButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
addStock();
}
});
但这会创建一个新实例(?..每次单击按钮时,他们甚至可以创建一个Clickhandler实例,因为它是一个接口)。如何解决这个问题,即所有按钮共享一个Clickhandler,Handler会按下Button按钮,因此他可以触发附加到该按钮的方法。
任何想法?如果您要查看信息并且需要更多代码,请告诉我。
提前致谢, 丹尼尔
答案 0 :(得分:2)
Java创建一个实现ClickHandler的匿名类的新实例。它可以做什么,因为您为接口指定的onClick函数提供了一个实现。
但是,当您单击按钮但是在调用addClickhandler时,不会创建此类。如果您需要多个事件的处理程序,请执行以下操作:
ClickHandler handler = new ClickHandler() {
public void onClick(ClickEvent event) {
addStock();
}
};
addStockButton.addClickHandler(handler);
someOtherButton.addClickHandler(handler);
在处理程序中,您可以使用event.getSource()来识别事件的来源。
如果您可以访问按钮变量,只需检查指针
即可if (addStockButton == event.getSource()) ...
或者您可以将getSource的结果转换为适当的类型并访问对象的属性/方法。
答案 1 :(得分:2)
Eelke已经回答了你的问题。我只想补充一点,如果您使用GWT的UiBinder功能,您可以实现您想要的效果:
@UiField
Button addStockButton;
@UiField
Button removeStockButton;
@UiHandler({ "addStockButton", "removeStockButton" })
void handleClickEvents(ClickEvent event)
{
if (event.getSource() == addStockButton)
{
addStock();
}
else if (event.getSource() == removeStockButton)
{
removeStock();
}
}
答案 2 :(得分:0)
它是接口的匿名实例,这就像声明一个实现该接口的新类一样。
我不得不问你为什么要这样做,你需要让ClickHandler
包含对其父级的引用。您还需要使按钮可识别,以便您可以在ClickHandler
的正文中选择正确的按钮。您是否需要只有一个实例那么糟糕,以至于您不能拥有多个匿名实例?