Ste*_*gle 4 gwt handlers event-handling
这可能是一件非常简单的事情,但我不知道如何实现以下内容.
package mods.client.resultSelector;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Composite;
public class MousyAbsolutePanel extends Composite implements MouseDownHandler {
AbsolutePanel abs = new AbsolutePanel();
public MousyAbsolutePanel(int width){
System.out.println("MousyAbsolutePanel being created with width:" + width);
initWidget(abs);
abs.setWidth(String.valueOf(width));
abs.setHeight("100%");
abs.setStyleName("mousyAbsolutePanel");
}
public void onMouseDown(MouseDownEvent event) {
System.out.println("onMouseDown()");
}
}
Run Code Online (Sandbox Code Playgroud)
我想拥有一个可以接受鼠标事件的absolutePanel.但是,在Composite对象中,我不知道如何将我编写的处理程序(onMouseDown()事物)与abs变量绑定.简而言之,我希望abs AbsolutePanel在点击时响应,但AbsolutePanels不会自然地接受点击事件.我该怎么做呢?
如果这很简单,请提前道歉,但我不太清楚如何实现这种行为,我在搜索过程中没有看到它.
在这种情况下,扩展Composite可能不是最佳选择,除非您故意阻止访问您在构造函数中创建的AbsolutePanel.如果你扩展AbsolutePanel,你将能够重用代码来添加/删除小部件等.
以下是我建议你这样做的方法:
package mods.client.resultSelector;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.HasMouseDownHandlers;
import com.google.gwt.user.client.ui.AbsolutePanel;
public class MousyAbsolutePanel extends AbsolutePanel implements
MouseDownHandler,HasMouseDownHandlers {
public MousyAbsolutePanel(int width) {
System.out.println("MousyAbsolutePanel being created with width:" + width);
this.setWidth(String.valueOf(width));
this.setHeight("100%");
this.setStyleName("mousyAbsolutePanel");
this.addMouseDownHandler(this);
}
/**
* MouseDownHandler
*/
public void onMouseDown(MouseDownEvent event) {
System.out.println("onMouseDown()");
}
/**
* HasMouseDownHandlers - Code to add handlers to the panel
*/
public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
return addDomHandler(handler, MouseDownEvent.getType());
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以像访问AbsolutePanel一样访问MousyAbsolutePanel,但使用其他事件处理程序,样式等.