• 締切済み

SWTでtextAreaのTAB挿入を無効にしたい

SWT勉強中の者です。 テキストエリアにて、TAB挿入を無効にしたいと思っています。 (次のコントロールにカーソルを動かしたいため) 以下のソースだとカーソルは移るのですが、 テキストエリアにTABが挿入されてしまいます。 TABを入れないようにするにはどのように記述すればよいのでしょうか? ご存知の方、ご教授お願いします。 textArea.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //タブが押された場合、次のコントロールにカーソルを移動 if(e.character==SWT.TAB){ textA.setFocus(); //tabを無効したい } } });

みんなの回答

  • auty
  • ベストアンサー率58% (284/486)
回答No.5

#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; } } の辺りをチェックしていただけますか。

pc070603
質問者

お礼

ご回答、ありがとうございます。 できました。 原因の解析はできなかったのですが、 addListenerの後にいろんなイベントを書いており、 それが問題だったのかもしれません。 ご回答いただいた内容の通り、 addListener時VerifyTabクラスの生成のみ 行い、その中でhandleEventのみ定義するようにしました。 addListenerの使い方、もっと勉強しないとですね。 何度もご丁寧にありがとうございました。 本当に助かりました。 ありがとうございました。

  • auty
  • ベストアンサー率58% (284/486)
回答No.4

>>> カーソルを移動する処理もキャンセル では、先にカーソルを移動しておいてはいかがでしょう。 if(e.character==SWT.TAB){ textA.setFocus(); // カーソルの移動 e.doit = false; // イベントをキャンセル }

pc070603
質問者

お礼

ご回答ありがとうございます。 やってみましたが、思うように動きませんでした。 テキストボックスの中でタブが挿入され、 次のコントロールにカーソルがうつりません。 イベントをいろいろ探してkeyPressedにしたのですが keyPressedイベントが駄目なのでしょうか? ほかのイベントも見てみます。 ありがとうございました。

  • auty
  • ベストアンサー率58% (284/486)
回答No.3

[修正] if(e.character==SWT.TAB){ e.doit = false; // イベントをキャンセル textA.setFocus(); // カーソルの移動 }

pc070603
質問者

お礼

お返事ありがとうございます。 やってみましたが、 テキストエリアには文字は入力できますがカーソルが移動してくれません。 テキストエリアから次のコントロールにカーソルを移動する処理もキャンセルされているみたいです。 //テキストエリアに文字が入っているときのみキャンセル if (textArea.getText().length() > 0) {  e.doit = false;  textArea.setFocus(); } もやってみましたが動きは変わりません。 SHIFT+TABで逆にカーソルを動かすと動いてくれます。 SHIFT押さないで普通に動いてくれるといいのに・・(苦笑)

  • auty
  • ベストアンサー率58% (284/486)
回答No.2

if(e.character==SWT.TAB){ textA.setFocus(); //tabを無効したい } の部分は残してもらえたでしょうか。たとえば、 e.doit = false; // イベントをキャンセル if(e.character==SWT.TAB){ textA.setFocus(); // カーソルの移動 }

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

以下のあらすじを参考にしてみてください。 ------------------------------------------------------------ textArea.addListener(SWT.Verify, new VerifyTab()); とし、 class VerifyTab implements Listener の handleEvent(Event e)の中で、 e.doit = false; によりイベントをキャンセルする。

pc070603
質問者

お礼

ご回答、ありがとうございます。 やってみましたが、textAreaからカーソルが遷移しなくなりました。 フォーカスの移動もキャンセルされてしまったようです。 文字の入力もできません。

関連するQ&A