2011-09-16 12 views
9

私はJTextPaneを持つjavaでアプリケーションを作っています。 と入力したとき(ユーザーが次の行に行くとき)にコードを実行できるようにしたい。私はウェブを見て、解決策を見つけられませんでした。 C#でこれに取り組む方が良いでしょうか?そうでない場合、JTextPaneのkeyTyped()イベントにEnterキーを登録するにはどうすればよいですか? C#が良い選択肢であれば、C#でどうやってこれを行うのですか?上記の例では動作しないのはなぜここJava:登録<ENTER> JTextPaneのキー押下

は私が働くだろうと思ったソリューションです...しかしなかったではない

//Event triggered when a key is typed 
private void keyTyped(java.awt.event.KeyEvent evt) { 
    int key = evt.getKeyCode(); 
    if (key == KeyEvent.VK_ENTER) { 
     Toolkit.getDefaultToolkit().beep(); 
     System.out.println("ENTER pressed"); 
    } 
} 

私が押すキーに関係なく、私は0のキーコードを取得するので、私は考えていますJavaではこの問題の解決策が好まれますが、C#はうまくいくかもしれません。また、あなたが本当に必要な場合を除き、例ではなくリンクで質問に答えるようにしてください。ありがとう!

+0

keyListenersを使用しないでください。@HovercraftとしてkeyBindingsを使用することをお勧めします。 – kleopatra

+0

getKeyCode()のJavaDocsから:KEY_TYPEDイベントの場合、keyCodeはVK_UNDEFINEDです。少なくとも1.3以降は文書化されています。 –

答えて

13

解決策の1つは、テキスト区画にキーバインディングを追加することです。例えば、

JTextPane textPane = new JTextPane(); 

    int condition = JComponent.WHEN_FOCUSED; 
    InputMap iMap = textPane.getInputMap(condition); 
    ActionMap aMap = textPane.getActionMap(); 

    String enter = "enter"; 
    iMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), enter); 
    aMap.put(enter, new AbstractAction() { 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     System.out.println("enter pressed"); 
    } 
    }); 
+3

+1 [キーバインディング](http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)。ただし、デフォルトの挿入ブレークアクションは失われます。 – trashgod

+2

@trashgodはtrueですが、要件が完全にはっきりしていない、a)デフォルトの動作を置き換える、b)デフォルトの動作に追加するb)単にデフォルトでトリガーを入れてカスタムでトリガーする – kleopatra

1

この答えは、誰もが今まで私は氏ムハンマドAdibと同じものを持ってこのスレッド を閲覧する場合にはあります。だからではなく、 (evt.getKeyCode()== evt.VK_ENTER)私は (evt.getKeyChar()== '\ n' の)

and the solution worked. 
+0

私のコメントは、 keyListenersを使用しないでください。より抽象度の高い解決策があります。@ trashgodの回答 – kleopatra

+0

を参照してください。getKeyCode()のJavaDocsから:KEY_TYPEDイベントの場合、keyCodeはVK_UNDEFINEDです。少なくとも1.3以降は文書化されています。私はOPがドキュメントを読むことはないと推定しています。 –

0

使用 を使用して、私はパスワードでENTERキーを探していますEnterを押したときにログインメソッドを起動するためのテキストフィールド。以下のコードはコンソールにキーコードを表示します。プログラムを実行し、ボックス内のいくつかのtihngsを入力した後、私はそれはあなたがキーを1回押すだけを探しているなら、あなたはまだ少し怠惰なると新しいの学習を避けることができるコード13

txtPass = new Text(shlLogin, SWT.BORDER | SWT.PASSWORD); 
    txtPass.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyPressed(KeyEvent e) { 
      System.out.println(e.keyCode); 
      if (e.keyCode == 13) { /* ... Do your stuff ... */ } 
     } 
    }); 

でEnterキーのための発見しましたこのメソッドを使用して、キーバインディングについての情報を提供します。楽しみはCTRL + [レター]ショートカットを追加するときに始まりますが、これは別の議論のためです。

関連する問題