- 締切済み
SWTでtextAreaのTAB挿入を無効にしたい
SWT勉強中の者です。 テキストエリアにて、TAB挿入を無効にしたいと思っています。 (次のコントロールにカーソルを動かしたいため) 以下のソースだとカーソルは移るのですが、 テキストエリアにTABが挿入されてしまいます。 TABを入れないようにするにはどのように記述すればよいのでしょうか? ご存知の方、ご教授お願いします。 textArea.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //タブが押された場合、次のコントロールにカーソルを移動 if(e.character==SWT.TAB){ textA.setFocus(); //tabを無効したい } } });
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- auty
- ベストアンサー率58% (284/486)
#1 に戻って、 textArea.addListener(SWT.Verify, new VerifyTab()); とし、 class VerifyTab implements Listener { public void handleEvent(Event e) { if(e.KeyCode==SWT.TAB) { // または、e.KeyCode==9 textA.setFocus(); e.doit = false; } } の辺りをチェックしていただけますか。
- auty
- ベストアンサー率58% (284/486)
>>> カーソルを移動する処理もキャンセル では、先にカーソルを移動しておいてはいかがでしょう。 if(e.character==SWT.TAB){ textA.setFocus(); // カーソルの移動 e.doit = false; // イベントをキャンセル }
お礼
ご回答ありがとうございます。 やってみましたが、思うように動きませんでした。 テキストボックスの中でタブが挿入され、 次のコントロールにカーソルがうつりません。 イベントをいろいろ探してkeyPressedにしたのですが keyPressedイベントが駄目なのでしょうか? ほかのイベントも見てみます。 ありがとうございました。
- auty
- ベストアンサー率58% (284/486)
[修正] if(e.character==SWT.TAB){ e.doit = false; // イベントをキャンセル textA.setFocus(); // カーソルの移動 }
お礼
お返事ありがとうございます。 やってみましたが、 テキストエリアには文字は入力できますがカーソルが移動してくれません。 テキストエリアから次のコントロールにカーソルを移動する処理もキャンセルされているみたいです。 //テキストエリアに文字が入っているときのみキャンセル if (textArea.getText().length() > 0) { e.doit = false; textArea.setFocus(); } もやってみましたが動きは変わりません。 SHIFT+TABで逆にカーソルを動かすと動いてくれます。 SHIFT押さないで普通に動いてくれるといいのに・・(苦笑)
- auty
- ベストアンサー率58% (284/486)
if(e.character==SWT.TAB){ textA.setFocus(); //tabを無効したい } の部分は残してもらえたでしょうか。たとえば、 e.doit = false; // イベントをキャンセル if(e.character==SWT.TAB){ textA.setFocus(); // カーソルの移動 }
- auty
- ベストアンサー率58% (284/486)
以下のあらすじを参考にしてみてください。 ------------------------------------------------------------ textArea.addListener(SWT.Verify, new VerifyTab()); とし、 class VerifyTab implements Listener の handleEvent(Event e)の中で、 e.doit = false; によりイベントをキャンセルする。
お礼
ご回答、ありがとうございます。 やってみましたが、textAreaからカーソルが遷移しなくなりました。 フォーカスの移動もキャンセルされてしまったようです。 文字の入力もできません。
お礼
ご回答、ありがとうございます。 できました。 原因の解析はできなかったのですが、 addListenerの後にいろんなイベントを書いており、 それが問題だったのかもしれません。 ご回答いただいた内容の通り、 addListener時VerifyTabクラスの生成のみ 行い、その中でhandleEventのみ定義するようにしました。 addListenerの使い方、もっと勉強しないとですね。 何度もご丁寧にありがとうございました。 本当に助かりました。 ありがとうございました。