为什么我的锚元素没有得到任何事件?

时间:2016-03-24 19:01:45

标签: gwt

对于一个非常简单的元素

public static class ToolHtml extends Anchor {

    private Long toolId;

    public ToolHtml(ToolDetails toolDetails) {

        this.toolId = toolDetails.getToolId();
        this.setText(toolDetails.getName());

        Style style = this.getElement().getStyle();
        style.setColor("orange");

        this.getElement().setId(DOM.createUniqueId());
    }

    public Long getToolId() {
        return this.toolId;
    }

}

我正在尝试添加一些事件处理程序。我对DragStartEvent感兴趣,但即使ClickEvent似乎也无效,我根本无法找出原因:

public void addOfferItem(ToolHtml toolHtml) {

    Set<ToolHtml> toolHtmlSet = this.toolIdToToolHtml.get(toolHtml.getToolId());

    if (toolHtmlSet == null) {
        toolHtmlSet = new HashSet<>();
        this.toolIdToToolHtml.put(toolHtml.getToolId(), toolHtmlSet);
    }

    toolHtml.getElement().setAttribute("contenteditable", "false");
    toolHtml.getElement().setAttribute("draggable", "true");

    toolHtml.addBitlessDomHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            LOGGER.fine("Click");
            LOGGER.fine("Click");
            LOGGER.fine("Click");

        }
    }, ClickEvent.getType());

    toolHtml.addDomHandler((DragStartEvent event) -> {
                LOGGER.fine("HANDLER DRAG START");
            },
            DragStartEvent.getType());

    toolHtml.addDomHandler((DragStartEvent event) -> {
                LOGGER.fine("DOM DRAG START");
            },
            DragStartEvent.getType());

    toolHtml.addBitlessDomHandler((DragStartEvent event) -> {
                LOGGER.fine("DRAG START");
            },
            DragStartEvent.getType());

    toolHtmlSet.add(toolHtml);

    // Attach/append to DOM
    this.getElement().appendChild(toolHtml.getElement());
}

有人知道这里的问题是什么吗?

1 个答案:

答案 0 :(得分:1)

您附加了一个元素,而不是附加了处理程序的Widget。您需要向窗口小部件添加窗口小部件才能使用所有功能。

注意:您需要使用

而不是toolHtml.addClickHandler
{{1}}