0

のドロップイベントをリッスンするにはどうすればよいのだろうかTextField。値チェックを行うには、そのイベントをインターセプトする必要があります。

私は拡張を書きTextBox、それは発火しますTextChangeEvents。しかし、テキスト フィールドにテキストをドロップすると、onBrowserEvent(Event event)メソッドが呼び出されません。

ヒントはありますか?

public class ExtendedTextBox extends TextBox {

    /**
     * Creates an empty extended text box.
     */
    public ExtendedTextBox() {
        super();

        // Catch the browser events.
        sinkEvents(Event.ONKEYUP);
        sinkEvents(Event.ONPASTE);

    }

    @Override
    public void onBrowserEvent(Event event) {
        super.onBrowserEvent(event);
        System.out.println(event.getTypeInt());

        switch (event.getTypeInt()) {
            case Event.ONKEYUP:
            case Event.ONPASTE: {
            // Fire the event after the text box shows the new data.
            Scheduler.get().scheduleDeferred(new ScheduledCommand() {

                @Override
                public void execute() {
                    fireEvent(new TextChangeEvent(ExtendedTextBox.this.getText()));
                }
            });
            break;
        }
        default:
        }
    }

    /**
     * Add a given {@link TextChangeEventHandler} to the widget.
     * 
     * @param handler
     *            the handler
     * @return {@link HandlerRegistration} used to remove the handler
     */
    public HandlerRegistration addTextChangeEventHandler(TextChangeEventHandler handler) {
        return addHandler(handler, TextChangeEvent.TYPE);
    }
}
4

2 に答える 2

0

TextBox はChangeEvent(またはValueChangeEvent- 現時点ではわかりません) を起動する必要があります。したがって、コンストラクター内で次のようなことを簡単に行うことができます。

this.addChangeHandler(new ChangeHandler ...

Focusそれだけでは不十分な場合は、イベントを聞くこともできます。

于 2013-03-21T18:01:30.097 に答える
0

ご協力いただきありがとうございます。私は今日自分でそれを理解しました。それは静かでシンプルです。すでに . があることに気づきませんでしたDropHandler

たとえば、コンストラクターでこれを行うことができます。

addDropHandler(new DropHandler() {

    @Override
    public void onDrop(DropEvent event) {
        if(!event.getDataTransfer().getData("text/plain").isEmpty()) {
            Scheduler.get().scheduleDeferred(new ScheduledCommand() {

                @Override
                public void execute() {
                    fireEvent(new TextChangeEvent(ExtendedTextBox.this.getText()));
                }
            });
        }

    }
});

TextFieldadd だけのデフォルトの動作を防ぐためevent.preventDefault();。これで、呼び出して入力を取得event.getDataTransfer().getData("text/plain")し、入力の検証などを行うことができます。

そして副作用としてonBrowserEvent(Event event)、テキストフィールドに何かをドロップすることでメソッドが呼び出されるようになりました。しかし、型 int は-1であるため、この場所ではあまり役に立ちません。

于 2013-03-22T12:03:13.787 に答える