1

クリックしていくつかのダイアログを開く単純な GWT PushButton があります。CSS スタイルは、onHovering がボタンの外観を変更するように記述されています。

このボタンをクリックしてダイアログを開き、それを閉じると、問題が発生します。onHovering スタイルはそのままです。

これは、PushButton の親である CustomButtom に、MouseOut イベントが発生した場合にのみホバリングを削除するコードがあるために発生します。問題は、暗い半透明の画面でダイアログを開くと、決して発生しないことです。対応するイベントは発行されず、ボタンは onHovered 状態のままです。

このイベントを手動で発生させることで、これを修正しようとしています。幸いなことに、ユーザーがそのダイアログを閉じると、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);
    }

...しかし、何らかの理由で、このコードはイベントを送信しません。新しい MouseOut イベントはコンソールに記録されず、onHovering スタイルは変更されません。例外はスローされません。

イベントを起動できないのはなぜですか? この問題を解決する他の方法はありますか?

GWT 2.5.1

4

2 に答える 2

0

最後に、私はそれを機能させました。より幅広い Thomas Broyer の回答に注意してください。

@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);
}
于 2013-09-19T14:17:02.137 に答える