• 締切済み

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

  • textareaに画像を表示したい

    textareaの入力支援を作成しています。 PHPで画像のディレクトリを開き別窓などに一覧表示させ、 その画像をクリックでjQueryでテキストエリアへタグを挿入。 <textarea id="test"> あああ <img src="hoge.jpg"> いいい </textarea> ↑のようにIMGタグを挿入する状態までは実装させることが出来るのですが、 UI的に、このIMGタグを画像(サムネ)として表示させたいと考えています。 <textarea id="test"> あああ ■(←画像) いいい </textarea> テキストエリアを監視して置換するなど方法はありそうなのですが そもそもテキストエリア内で画像を表示させることができるのでしょうか? 何かいいアイディア、あるいはプラグイン等がありましたら教えてください。

  • TABキーの検出

    Swingコンポーネントで、TABキーのイベントを取得する 方法を教えてください。 タブキー以外は検出できるのですが… import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class TabKeyListener { public TabKeyListener() { JPanel panel = new JPanel(); panel.addKeyListener( new KeyListener(){ public void keyPressed(KeyEvent e) { System.out.println(e.getKeyCode()); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } ); JFrame frame = new JFrame(); frame.add(panel); frame.setBounds(100,100,200,200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); panel.requestFocusInWindow(); } public static void main(String[] args) { new TabKeyListener(); } }

    • ベストアンサー
    • Java
  • Java バックグラウンドでキーを監視したい

    Swingを使用しています。ウィンドウにフォーカスが外れても、どのキーが押されたか判定できる方法を教えて下さい。 フォーカスがあっていれば、動作するプログラムは作れました。 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class KeyListenerOnBackgroundTest extends JFrame implements KeyListener{ public KeyListenerOnBackgroundTest() { setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); addKeyListener(this); } public static void main(String[] args){ new KeyListenerOnBackgroundTest().setVisible(true); } @Override public void keyPressed(KeyEvent e) { // 文字とコードを表示する System.out.println(e.getKeyCode()+":"+e.getKeyChar()); } @Override public void keyReleased(KeyEvent e) {} @Override public void keyTyped(KeyEvent e) { } }

    • ベストアンサー
    • Java
  • テキストボックスとカーソルの制御

    30個のテキストボックスがある画面で、 tabindexにはそれぞれのテキストボックス1~30と 同じインデックスが振られています。 例としてテキストボックス1に入力した時、 エラーメッセージを出して、 OKを返したらテキストボックス2にカーソルが行かないで、 テキストボックス1に戻るようにするには どのようにすれば良いでしょうか? 但しSetfocusでは無く、エラーが発生した テキストボックスにカーソルが戻った時に、 他のテキストボックスをクリック又はTabを押した時に、 カーソルが遷移するように、カーソルを自由にコントロール 出来るようにしたいのですが。 注文が多くなってしまいましたが、書き込みをお待ちしております。

  • アプレットでのキー入力

    具体的にいうと以下のアプレットを実行した場合に矢印キーを入力しても反応(上、下、、、が表示されない。)がないのです。 一度アプレット自体をクリックしても反応がありません。 何が悪いのでしょうか?よろしくお願いします。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class practice extends JApplet { private JLabel lb1,lb2; public void init() { Container cnt = getContentPane(); lb1 = new JLabel("矢印キーでお選びください。"); lb2 = new JLabel(); cnt.add(lb1,BorderLayout.NORTH); cnt.add(lb2,BorderLayout.SOUTH); addKeyListener(new practiceKeyListener()); } class practiceKeyListener extends KeyAdapter { public void KeyPressed(KeyEvent e) { String str; int k = e.getKeyCode(); switch(k){ case KeyEvent.VK_UP: str = "上";break; case KeyEvent.VK_DOWN: str = "下";break; case KeyEvent.VK_LEFT: str = "左";break; case KeyEvent.VK_RIGHT: str = "右";break; default: str = "他のキー"; } lb2.setText(str + "ですね。"); } } }

    • ベストアンサー
    • Java
  • こんにちは

    こんにちは java初心者です。早速ですが質問させていただきます。 スペースキーを押したときに、ラベルにテキストを表示させる意図で 以下のようなコードを作りましたが、うまくいきません。 どなたか、ダメな点を指摘していただけないでしょうか。 よろしくお願いします。 import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; class KeyClass extends KeyAdapter { int keyshot; public KeyClass() { keyshot = 0; } public void keyPressed(KeyEvent e) { int kc = e.getKeyCode(); if( kc == KeyEvent.VK_SPACE) { if( keyshot == 0 ) { keyshot = 2 ;} else keyshot = 1; } } public void keyReleased(KeyEvent e) { int kc = e.getKeyCode(); if( kc == KeyEvent.VK_SPACE) { keyshot = 0; } } public int checkShotKey() { int ret = keyshot; if(keyshot == 2) keyshot =1; return ret; } } import java.applet.Applet; import java.awt.*; import java.awt.event.*; /*<applet code="keytest.class" width="300" height="100"></applet> */ public class keytest extends Applet implements Runnable { KeyClass keyclass; Thread th; Label label1; Label label2; String st1; int shotkey_state; int count; public void init() { setBackground( new Color(120,60,80) ); keyclass = new KeyClass(); addKeyListener(keyclass); label1 = new Label("スペース押してね"); label2 = new Label(); add(label1); add(label2); th = new Thread(this); th.start(); shotkey_state=0; } public void run() { while(true) { try{ Thread.sleep(1000); for(count=0; ; count++) { shotkey_state = keyclass.checkShotKey(); if( (shotkey_state==1 || shotkey_state==2)&&(count%4==0) ) { st1 = "スペース押したよ!!"; } else st1 = ""; label2.setText(st1); } } catch(InterruptedException ie) {} } } }

    • ベストアンサー
    • Java
  • DOMの要素ををtextarea(dropした位置

    jquery ui のdraggable,droppableを使って、あるDOMの要素ををtextarea(dropした位置)に挿入したいです。 ドラッグ、ドロップは普通に動かせるのですが、以下の機能が実装できません。 情報お持ちの方、いらっしゃいましたら、お願いします。 ドラッグ中、または、ドロップした瞬間に、textareaのキャレット位置を取得する 実装方法が思いつきません。 (ドロップ時点です。) 欲を言えば、ドラッグ中にキャレット位置を表示させたいです。 ※ちょうど、chromeやFFで画像をテキストエリアにドラッグするようなイメージです。

  • textareaへの入力支援機能(ボタン)[Javascript]

    textareaへの入力支援機能(ボタン)[Javascript] 他の方が質問されていた件への回答についてのですが、 http://okwave.jp/qa/q2097862.html ANo.3の方の回答を参考にブログにあるようなテキストエリアへの入力支援機能を作成しています。 javascriptはあまり詳しくないので、まず丸々コピーをして テストを行っていたのですが、FIREFOXだと正常に動きますが、 IEの場合、テキストを選択せずにボタンを押すとボタン内に直接タグが追加されてしまいます。 テキストを選択した状態ですと正常に動作するようです。 テキストを選択しなくてもタグが挿入されるか、テキストを選択していない場合はタグが挿入されないようにしたいのです。 色々いじってみたのですが、思うように動かすことができませんでした。。 詳しい方、対処方法がわかる方がいらっしゃったらぜひ教えていただけないでしょうか。 宜しくおねがいします。

  • 【エクセルVBA】 タブでのカーソル移動の質問です

    ユーザーフォームを設置して、テキストボックスを複数設置し、入力援助するVBAを組んでいます。 タブインデックスのとおりに、タブもしくはエンターキーで、通常はカーソルがテキストボックス間を移動しますが、ほんのたまにですが、エンターキーで移動ができず、またタブキーではテキストボックス内にタブができてしまい、次のテキストボックスに移動しない現象が現れます。 そうした場合はマウスで次のボックスにカーソルを移動しますが非常に面倒です。またこの現象はファイルを再起動したら直ったり直らなかったり、ウインドウズを再起動しても直らなかったりで困っています。 どうしてこのようなカーソル移動の不具合が起こるのか、またはどうしたら無くなるのでしょう?

  • テキストボックスに文字挿入したい

    テキストボックスがあり、そこに文字が並んでいて、ある場所にカーソルがあるとします。そのカーソルの場所にボタンクリックで文字を挿入というのはできるものでしょうか。 テキストボックスにカーソルがある状態でボタンにカーソルを移動するとそもそも無理なのかと思ったため、質問されていただきました。 (例) テキストボックス:東京|都に行った 「|」はカーソルのつもり。 ボタンをクリックすると「|」の次に「ほげほげ」という文字が入るようなことができるでしょうか。