2014-05-19 64 views
0

我想從用戶輸入到JComponent中的每個關鍵字獲取ascii字符。Java如何從關鍵代碼獲取ascii字符

<JComponentName>.addKeyListener(new KeyAdapter() { 
    @Override 
    public void keyPressed(KeyEvent e) { 
     char ch = getAsciiCharFromKeyCode(e.getKeyCode()); 
    } 
}); 

private char getAsciiCharFromKeyCode(int keyCode) { 
    // this implementation is what I'm interested in 
} 

當我按下 'E'(英文 'E')和 'у'(西裏爾字母 'U'),我得到了相同的密碼(0x45KeyEvent.VK_E)。是否有某種方式來實現getAsciiCharFromKeyCode功能,無需寫我自己的哈希表是這樣的:

HashMap<Integer, Character> keyCodeToChar = new HashMap<Integer, Character>(); 
keyCodeToChar.put(KeyEvent.VK_E, 'e'); 

+0

我沒有測試它,但也許你正在尋找'e.getKeyChar()'。 – Pshemo

回答

2

正如Pshermo已經提到的,你要找的是e.getKeyChar方法(),但是,它只是在對的keyTyped方法meaningfull作爲解釋here

您的代碼將修改這個樣子的:

<JComponentName>.addKeyListener(new KeyAdapter() { 
    @Override 
    public void keyTyped(KeyEvent e) { 
     char ch = e.getKeyChar(); 
    } 
}); 
+0

如果我想檢測按下的fn鍵,該怎麼辦。我將如何做到這一點 – viper

0

查看教程Oracle: How to Write a Key Listener以獲取有關如何使用KeyEvent獲取關鍵信息的更多信息。

Oracle說:

對於關鍵類型的事件,你可以得到關鍵字符值以及所使用的任何修飾。

注:
你不應該依賴,除非它涉及的關鍵類型的事件從getKeyChar返回鍵字符值。

您可能需要將語言環境設置爲接受語言特定的鍵盤字符。

class MyFrame extends JFrame { 
    private JTextArea txtara; 
    private JLabel lbl; 

    public MyFrame() { 
     super(); 
     this.getContentPane().setLayout(); 
     this.getInputContext().selectInputMethod(new Locale("ru")); // Russian 

     txtara = new JTextArea(5, 20); 
     lbl = new JLabel("Key: "); 

     txtara.addKeyListener(new KeyListener() { 
      public void keyPressed(KeyEvent e) { 
       lbl.setText("Key: " + e.getKeyChar()); // Show typed character 
      } 
      public void keyReleased(KeyEvent e) {} 
      public void keyTyped(KeyEvent e) {} 
     }; 

     this.getContentPane().add(txtara, BorderLayout.CENTER); 
     this.getContentPane().add(lbl, BorderLayout.SOUTH); 
    } 
} 

免責聲明:這個代碼沒有被編譯...