32

私のコード:

@Override
public void onKeyPress(KeyPressEvent event)
{
    if (event.getCharCode() == KeyCodes.KEY_ENTER)
    {
        registerButton.click();
    }
}

これは TextBox にアタッチされており、Enter キーを押すと起動します。 event.getCharCode()はゼロであり、 ではありません13。タブを押す0と 、エスケープを押すと0です。ああ!

これは昨日は正常に機能していましたが、これに影響を与えるためにプロジェクトの他の場所で何かが変更されましたが、それが何であるかはわかりません。昨日、関連する変更が行われていないようです。

代わりに を処理するKeyUpEventと、これは期待どおりに機能します。

GWT 2.1.0 を使用しています。アイデアをありがとう!

4

6 に答える 6

37

これKeyPressHandlerは、たとえば、、、キーに使用さSHIFTれますCTRLALT

イベントを別のキーに添付する場合は、を使用する必要がありますKeyDownHandler

nameField.addKeyDownHandler(new KeyDownHandler() {

    @Override
    public void onKeyDown(KeyDownEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            Window.alert("hello");
        }

    }

});
于 2010-11-09T08:58:09.213 に答える
8

またはあなたはこれを試すことができます

if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
于 2010-11-11T23:11:36.530 に答える
4

KeyPresshandler の代わりに KeyUpHandler を使用する必要があります。

newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            addStock();
        }
    }
});
于 2013-01-27T12:43:50.453 に答える
2

FF での動作が変わる可能性があります。私は GWT 2.4.0 と Firefox 10 を使用しています。このコメントによると、問題を解決する前に以下のようなものを使用する必要があります。

@Override
public void onKeyPress(KeyPressEvent event) {
    int keyCode = event.getUnicodeCharCode();
    if (keyCode == 0) {
        // Probably Firefox
        keyCode = event.getNativeEvent().getKeyCode();
    }
    if (keyCode == KeyCodes.KEY_ENTER) {
        // Do something when Enter is pressed.
    }
}
于 2012-02-19T08:26:57.247 に答える
1

2.0.4から2.2.1にアップデートしたときに同じ問題が発生したため、gwtコードに関連しているようです。

問題の一部は、KeyPressedEventがネイティブ(つまりブラウザー固有の)キー押下イベントを表すことです。この問題について提出したバグでは、コメントの1つに次のように書かれています。

ただし、「escape」はKeyPressEvent(IEおよびWebKitの動作)を生成しないことが期待されます。それらにはKeyDownまたはKeyUpを使用する必要があります。Firefox(およびOpera)は、残念ながら他のイベントよりも多くのキープレスイベントを発生させます(IEとWebKitは、最も賢明な実装であり、W3CがDOM 3イベントで標準化しようとしているもの、AFAICT)が、その場合、getCharCode()は0です。したがって、それらを安全に無視できます。唯一の例外(他にもあるかもしれません)は「Enter」キーです。ブラウザのキー/文字イベントは非常に混乱しているため、GWTは物事を均質化するために多くのことをしません(少なくとも今のところ)。

この混乱が解決されるまで、最善の策はKeyDownHandlerまたはKeyUpHandlerで回避策を使用することです。

于 2011-04-14T21:40:38.240 に答える
0

GWT 2.5:

public void onKeyPress(KeyPressEvent event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
        // Event
    }
}
于 2013-02-26T10:19:41.230 に答える