2011-09-16 75 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,請使用keyBindings作爲@Hovercraft建議 – kleopatra

+0

從JavaDocs for getKeyCode():'對於KEY_TYPED事件,keyCode是VK_UNDEFINED.'它至少從1.3開始被記錄。 –

回答

13

一種解決方案是在文本窗格上添加一個鍵綁定。例如,

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是真的,但要求不是完全清楚,可能是a)替換默認行爲或b)添加到默認行爲對於b)只需將自定義 – kleopatra

1

這個答案的情況下,沒有人認爲這一線程 我得到了同樣的事情穆罕默德·阿迪先生。因此,而不是使用 (evt.getKeyCode()== evt.VK_ENTER) 我用 (evt.getKeyChar()== '\ n')

and the solution worked. 
+0

中的默認值和觸發器包裝起來,問題仍然存在:不要使用keyListeners ...永遠。有更高抽象級別的解決方案,請參閱@trashgod的答案 – kleopatra

+0

從JavaDocs for getKeyCode():對於KEY_TYPED事件,keyCode是VK_UNDEFINED.'至少從1.3開始記錄。我假設OP從不閱讀文檔。 –

0

我正在尋找在密碼輸入鍵文本字段,當按下ENTER時啓動登錄方法。下面的代碼將在控制檯中輸出鍵碼。在框中運行的程序,並鍵入一些tihngs後,我發現了回車鍵是代碼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 ... */ } 
     } 
    }); 

如果你正在尋找一個單一的按鍵,你仍然可以懶一點,避免學習新關於鍵綁定的東西,通過使用這種方法。添加CTRL + [Letter]快捷鍵時,樂趣開始 - 但這是另一個討論。