複数行のテキストフィールドがタブキーの押下を「盗む」のを防ぐにはどうすればよいですか?
つまり、TABを使用してウィンドウの要素間を循環したいのですが、複数行のテキストを入力すると、TABは「通常の」キーになり、入力しているテキストにタビュレーターを挿入するだけです。
これをどのように処理しますか?カスタムリスナーを作成する必要がありますか、それともSWT定数を使用してコンポーネントの動作を変更できますか?
SWTは、TraverseListenerクラスを使用してこの種の動作を実装するためのメカニズムを定義します。次のスニペット(ここから取得)は、その方法を示しています。
Text text1 = new Text(shell, SWT.MULTI | SWT.WRAP);
text1.setBounds(10,10,150,50);
text1.setText("Tab will traverse out from here.");
text1.addTraverseListener(new TraverseListener() {
public void keyTraversed(TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
e.doit = true;
}
}
});
キーストロークリスナーをテキストフィールドまたはテキストエリアに追加し、の特別なハンドラーを実装しTABます。Swingアプリケーションでもこの「タブキャッチ」を確認しましたが、通常は煩わしいものです。
テキストフィールドでタブを許可したい場合は、Shift-の別のハンドラーを提供しTABて、を挿入することができます。\t