2012-05-14 70 views
2

我試圖在GWT中將畫布添加到keyboardlistener。但它不起作用。GWT - 如何將keyboardlistener添加到畫布?

我還將鼠標處理程序添加到此畫布並且它可以正常工作。

這裏是鼠標處理程序的代碼(這工作):

canvas.addMouseMoveHandler(new MouseMoveHandler() { 
     public void onMouseMove(MouseMoveEvent event) {  
      mouseX = event.getRelativeX(canvas.getElement()); 
      mouseY = event.getRelativeY(canvas.getElement()); 
     } 
    }); 

這裏是鍵盤處理程序的代碼(這不起作用):

canvas.addKeyDownHandler(new KeyDownHandler() { 
     public void onKeyDown(KeyDownEvent event) { 
      int key = event.getNativeKeyCode(); 
      System.out.println("key: " + (char) key); 
      System.out.println("keypressed :"+ event.getNativeKeyCode()); 
     } 
    }); 

任何想法?


編輯GwtCanvasDemo.java: 初始化我的畫布作爲相同的方式,這個類來完成。我只是添加了addkeydownhandler,並沒有工作。我嘗試了Chrome和IE9。

+0

你在哪裏初始化你的'canvas'?在這裏粘貼代碼。 – HashimR

+0

你使用什麼瀏覽器? – HashimR

回答

2

我試過這段代碼。它爲我工作。

RootPanel rootPanel = RootPanel.get(); 

final Canvas canvas = Canvas.createIfSupported(); 
canvas.addKeyDownHandler(new KeyDownHandler() { 
    public void onKeyDown(KeyDownEvent event) { 
     int key = event.getNativeKeyCode(); 
     System.out.println("key: " + (char) key); 
     System.out.println("keypressed :"+ event.getNativeKeyCode()); 
    } 
}); 

rootPanel.add(canvas, 0 ,0); 

輸出:(當我按下 '我', 'U', 'Y' 瀏覽器選擇畫布之後)

key: I 
keypressed :73 
key: U 
keypressed :85 
key: Y 
keypressed :89 
+0

,這不適合我。我選擇我的畫布和我的鼠標處理程序工作,但不是鍵盤。 – tchike

+0

@tchike:你在使用什麼GWT SDK? – HashimR

+0

我正在使用GWT 2.4.0。我用FocusPanel替換了RootPanel,我在其中添加了畫布並且工作正常。 – tchike