2012-05-18 51 views
0

我想生成特殊字符的鍵盤事件,例如£, €, µ, ½, Ö, Ä等。我能夠生成鍵盤上的按鍵事件,比如'A,B,c,%,*,^'等用下面的代碼:爲特殊字符生成AWT鍵事件

public static void generateKeyEvent(final int c) { 

     new Thread() { 
      public void run() { 

       try { 
        Robot robot = new Robot(); 
        robot.keyPress(c); 

        try { 
         Thread.sleep(10); 
        } catch (InterruptedException e) { 
        } 
        robot.keyRelease(c); 
       } catch (Exception e) { 
       e.printStackTrace(); 
       } 
      } 
     }.start(); 

    } 

在普通字符情況下,工作正常,但在我的代碼上述字符的情況下拋出以下異常:

我過程中發現
java.lang.IllegalArgumentException: Invalid key code 
at sun.awt.windows.WRobotPeer.keyPress(Native Method) 
at java.awt.Robot.keyPress(Unknown Source) 
at com.companyname.utils.Abc$1.run(Abc.java:286) 

一件事我尋找這個問題的解決方案,就像這些s一樣特殊字符沒有映射到我的鍵盤上,這就是爲什麼它拋出這個異常。

任何想法,我該怎麼做?

+1

以及如何按下不存在的密鑰? –

回答

0

你是如何通過鑰匙? 請注意,Robot.keyPress期望鍵碼,而不是字符。看看KeyEvent constants。有一個VK_EURO_SIGN,不知道其他人。 當按下特定的按鍵(按鍵組合)時,您應該能夠通過執行KeyListener並檢查KeyEvent.getKeyCode()來獲得任意的按鍵代碼。

+0

我已經創建了一個視圖,其中包含這些特殊字符的按鈕,當用戶按下它時,我需要生成按鍵事件。 – mudit

+0

你能提供一些示例代碼嗎?當你說視圖 - 這是一個Android應用程序? –

+0

爲什麼我會在android中生成AWT事件?它是一個本地Java應用程序。對於查看代碼:它是一個簡單的jframe,它有一個jbutton。 – mudit

1

我得到了這個問題的答案..基本上,如果你想打印這樣的符號那麼你需要「alt」鍵輸入。

例如:如果您需要在記事本中鍵入'é',則必須鍵入alt + 130。

所以我做了同樣的事情,我爲alt生成了關鍵事件,然後是numpad 1,然後是numpad3,最後是numpad0。