質問
次のコードスニペットがあります。changeTextAreaはTextAreaオブジェクトです。
changeTextArea.addKeyboardListener(new KeyboardListenerAdapter()
public void onKeyPress( Widget sender, char keyCode, int modifier){
//do something
//I WISH TO STOP THE EVENT THAT MAPS TO THIS KEYPRESS FROM BUBBLING ANY FURTHER
}
}
このメソッドが、changeTextAreaからchangeTextAreaを含むPanels / Widgets / Composites / Whateverにバブリングすることから呼び出されるイベントを停止するにはどうすればよいですか。簡潔に言えば、それ以上泡が出ないようにするにはどうすればいいですか。助けていただければ幸いです(特にコードサンプル)。
解決
私が知る限り、キーボードリスナーを介してそれを行うことはできませんが、DOMクラスを使用してイベントプレビューを追加することで可能です。
DOM.addEventPreview(EventPreview preview)
その後、イベントを取得すると:
onEventPreview(Event event)
イベントをキャンセルする場合は、falseを返す必要があります。 Eventオブジェクトはこのメソッドもサポートしています:
public final void cancelBubble(boolean cancel)
指定されたイベントのバブリングをキャンセルします。これにより、イベントが親要素に伝播されなくなります。
ここで詳細を確認できます。 http:// google-web-toolkit .googlecode.com / svn / javadoc / 1.5 / index.html?overview-summary.html
他のヒント
イベントにアクセスできるコード内から、イベントのcancelBubble()およびpreventDefault()メソッドを間違いなく使用できます。イベントをプレビューする必要はありません...
送信者のcancelKey()イベントを呼び出すことができます。数字の入力のみを許可し、他のすべてのキーは拒否される例を次に示します。
プライベートクラスRowColChangeHandlerはKeyPressHandlerを実装します {
public void onKeyPress(KeyPressEvent event) {
char keyCode = event.getCharCode();
if(keyCode <48 || keyCode >57)
{
((TextArea)event.getSource()).cancelKey();
}
}
}
可能な場合は、
event.doit = false