2012-05-14 71 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