私のコード:
_@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を使用しています。任意のアイデアをありがとう!
KeyPressHandler
は、たとえば SHIFT、 CTRL、 ALT キー。
イベントを別のキーにアタッチする場合は、KeyDownHandler
を使用する必要があります。
nameField.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
Window.alert("hello");
}
}
});
またはこれを試すことができます
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
KeyPresshandlerの代わりにKeyUpHandlerを使用する必要があります。
newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
addStock();
}
}
});
彼らはFFの行動を変えるかもしれません。私はGWT 2.4.0とFirefox 10を使用しています。これによると comment によると、問題を修正する前に以下のようなものを使用する必要があります。
@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.
}
}
2.0.4から2.2.1に更新するときに同じ問題が発生したため、gwtコードに関連しているようです。
問題の一部は、KeyPressedEventがネイティブ(つまりブラウザ固有)のキープレスイベントを表すことです。この問題について提出した バグ では、コメントの1つに次のように書かれています。
ただし、「エスケープ」ではKeyPressEvent(IEおよびWebKitの動作)は生成されないではないと予想されます。それらにはKeyDownまたはKeyUpを使用する必要があります。残念ながら、Firefox(およびOpera)は他よりもはるかに多くのキープレスイベント(IEとWebKit、最も賢明な実装であるW3CがDOM 3イベント、AFAICTで標準化しようとしているもの)を起動しますが、その場合、getCharCode()は0です。無視してかまいません。 1つの例外(他にもあります)は「Enter」キーです。ブラウザーのキー/文字イベントは、GWTが物事を均質化するためにあまり機能しないほど混乱しています(少なくとも現時点では)。
この混乱が解決するまで、最善の策は、KeyDownHandlerまたはKeyUpHandlerで回避策を使用することです。
GWT 2.5:
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
// Event
}
}