gwt - 如何在 GWT 1.6 中向复合面板添加事件处理程序

标签 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()");
    }

}

我想要一个可以接受鼠标事件的有效绝对面板。但是,在 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());
    }

}

然后,您可以像访问 AbsolutePanel 一样访问 MousyAbsolutePanel,但使用额外的事件处理程序、样式等。

关于gwt - 如何在 GWT 1.6 中向复合面板添加事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/831168/

相关文章:

android - 在android中使用Ksoap2时处理超时

c++ - 在 Visual C++ 中单击按钮显示和隐藏图形

tomcat - 是否可以在 "war"目录之外使用 .jar?

javascript - 为什么我的 Javascript 函数有时只能工作?

java - 如何在GWT中组合KeyUpHandler和ValueChangeHandler?

JavaScript 事件处理程序不工作

c# - 单元格焦点上的 CellValidating 错误

c# - DataGridView 如何检测用户何时通过按转义退出编辑控件?

java - 客户端和服务器端规则引擎?

java - GWT - 无法获取类的类型签名