Events GWT:如果单击打开对话框,则按钮不会删除悬停

Events GWT:如果单击打开对话框,则按钮不会删除悬停,events,gwt,Events,Gwt,我有一个简单的GWT按钮,通过点击打开一些对话框。CSS样式的编写方式使onhover更改按钮的外观 当我单击此按钮并关闭某个对话框时,问题开始出现。悬停的风格依然存在 这是因为在按钮的父级CustomButtom中有一个代码,该代码仅在发生MouseOut事件时才删除悬停。问题是,如果你打开一个带有深色半透明屏幕的对话框,它永远不会出现。未发出相应的事件,且按钮仍处于悬停状态 我试图通过手动触发此事件来修复此问题。幸运的是,当用户关闭该对话框时,我可以捕捉到onBlur事件并尝试在那一刻做些事

我有一个简单的GWT按钮,通过点击打开一些对话框。CSS样式的编写方式使onhover更改按钮的外观

当我单击此按钮并关闭某个对话框时,问题开始出现。悬停的风格依然存在

这是因为在按钮的父级CustomButtom中有一个代码,该代码仅在发生MouseOut事件时才删除悬停。问题是,如果你打开一个带有深色半透明屏幕的对话框,它永远不会出现。未发出相应的事件,且按钮仍处于悬停状态

我试图通过手动触发此事件来修复此问题。幸运的是,当用户关闭该对话框时,我可以捕捉到onBlur事件并尝试在那一刻做些事情。我尝试手动创建OnMouseOut事件:

    @Override
    public void onBrowserEvent(Event event) {

        int type = DOM.eventGetType(event);
        if (type == Event.ONBLUR)
        {
            NativeEvent evt2 = Document.get().createMouseOutEvent(1, 0, 0, 0, 0, false, false, false, false, NativeEvent.BUTTON_LEFT, MyPushButton.this.getElement());
            MyPushButton.this.getElement().dispatchEvent(evt2);
        }

        logger.info(event.getType());

        super.onBrowserEvent(event);
    }
。。。但由于某些原因,此代码从不发送事件。控制台中不会记录新的鼠标移出事件,并且不会更改悬停样式。没有抛出异常

为什么我不能启动事件? 还有其他办法解决这个问题吗

GWT 2.5.1这是一个已知的问题:

实际上,有,如果可能的话,建议您使用
按钮
(或
提交按钮
重置按钮
)和CSS;或者可能是
TextButton
(或者是自定义的基于单元格的
ButtonBase
子类)。
ToggleButton
可能是一个例外,因为除了复选框之外,它没有真正的等价物。

这是一个已知的问题:

实际上,有,如果可能的话,建议您使用
按钮
(或
提交按钮
重置按钮
)和CSS;或者可能是
TextButton
(或者是自定义的基于单元格的
ButtonBase
子类)。

ToggleButton
可能是一个例外,因为它除了一个复选框之外没有真正的等价物。

最后我让它工作起来了。请注意托马斯·布罗耶的答案,答案更为宽泛

@Override
/**
 * In case onClick opens dialog, mouseOutEvent is not issued, thus preventing the button
 * from removing the onHovering styles. Firing that event manually onBlur.
 */
public void onBrowserEvent(Event event)
{
    if (DOM.eventGetType(event) == Event.ONBLUR)
    {
        NativeEvent mouseOutEvent = Document.get().createMouseOutEvent(1, 0, 0, 0, 0, false, false, false, false, NativeEvent.BUTTON_LEFT, getElement().getParentElement());
        getElement().dispatchEvent(mouseOutEvent);
        super.onBrowserEvent(Event.as(mouseOutEvent));
    }
    super.onBrowserEvent(event);
}

我终于成功了。请注意托马斯·布罗耶的答案,答案更为宽泛

@Override
/**
 * In case onClick opens dialog, mouseOutEvent is not issued, thus preventing the button
 * from removing the onHovering styles. Firing that event manually onBlur.
 */
public void onBrowserEvent(Event event)
{
    if (DOM.eventGetType(event) == Event.ONBLUR)
    {
        NativeEvent mouseOutEvent = Document.get().createMouseOutEvent(1, 0, 0, 0, 0, false, false, false, false, NativeEvent.BUTTON_LEFT, getElement().getParentElement());
        getElement().dispatchEvent(mouseOutEvent);
        super.onBrowserEvent(Event.as(mouseOutEvent));
    }
    super.onBrowserEvent(event);
}