2015-01-05 45 views
2

我正在接受Java的幫助:Herbert Schildt的完整參考資料(第8版)瞭解Java。 閱讀時,我發現KEY_TYPED事件僅在生成字符時纔會發生。這是否意味着生成了一個字符(0-9,A-Z)?如果是這樣,則不宜對應的ASCII等價物爲代碼到該KeyEvent傳遞給構造函數:如果在生成字符時發生KEY_TYPED事件,那麼爲什麼KeyEvent的代碼參數包含VK_UNDEFINED?

KeyEvent(Component src, int type, long when, int modifiers, int code, char ch) 

但書上說,對於KEY_TYPED事件,代碼將包含VK_UNDEFINED。這裏沒有用鍵入的鍵定義代碼嗎?

回答

4

這是因爲KEY_TYPED事件不一定具有相應的VK代碼。 VK代碼來自鍵盤,代表一個關鍵。如果我按下'a'鍵,我會看到一個帶有VK_A代碼的按鍵事件。現在,正如你所說,KEY_TYPED事件發生在一個字符生成時。事情是,字符是由OS通過取決於語言環境的字符映射翻譯VK代碼之後生成的。

作爲一個例子,用我的鍵盤,我可以用某種組合鍵輸入'ö'。這將通過VK_SHIFT,VK_DEAD_CIRCUMFLEX和VK_O激發一堆關鍵事件,但只有一個KEY_TYPED事件帶有'ö'字符。更糟糕的是,我可以通過按6個鍵(ALT + 0 + 1 + 4 + 1 + 4)鍵入一個'†',同樣,只有一個KEY_TYPED事件會被觸發。現在,什麼VK代碼你會在事件?這並不意味着什麼,所以他們決定始終將VK_UNDEFINED保持一致,即使是簡單的字符。

相關問題