2011-01-08 2 views
1

캔버스를 중심으로 한 GWT 앱에서 초점 맞추기가 올바른 위치, 특히 키보드 단축키로 향하게하는 데 어려움을 겪고 있습니다. 현재로서는 FocusPanel에 캔버스를 래핑했지만 FocusPanel이 그 뷰를 닫지 않기 때문에 Canvas가 RequiresResize 프로토콜에 응답하지 않습니다.GWT의 문서 또는 창에 이벤트 처리기를 연결하려면 어떻게해야합니까?

두 번째 문제는 FocusPanel이 Ctrl-A 키 누르기 이벤트를 전혀받지 못한다는 것입니다 (Mac Chrome에서 테스트 됨). 나는 Ctrl-Z와 다른 키들 (화살표와 같은)을 정상적으로 얻을 수있다.

순수 자바 스크립트 세계에서이 문제에 대한 최선의 대답은 마우스 또는 키 처리기를 문서 또는 창 개체에 연결하는 것입니다 (나는 더 좋지 않습니다.). 그러나 GWT에서이 작업을 수행하는 확실한 방법은 없습니다. 특히 Document 및 Window 클래스에는 이러한 종류의 이벤트 핸들러를 연결하는 메소드가 없습니다.

누구나 키보드 단축키를 처리 할 수있는 적절한 위젯에 초점을 맞추는보다 일반적인 문제를 해결하는 방법을 알고 있습니까?

답변

3

당신은 RequiresResize 및 ProvidesResize 인터페이스를 구현하는 FocusPanel을 확장하여 첫 번째 문제를 해결할 수 있습니다 :이 (I 그래서 나는 XML 바인더를 사용할 수 null의 생성자를 필요 제외) 내 크기 조정을 수정

public class ResizingFocusPanel 
    extends FocusPanel 
    implements RequiresResize, ProvidesResize 
{ 
    public ResizingFocusPanel() {} 

    public ResizingFocusPanel(Widget child) { 
    super(child); 
    } 

    @Override 
    public void onResize() { 
    if (getWidget() instanceof RequiresResize) { 
     ((RequiresResize)getWidget()).onResize(); 
    } 
    } 
} 
+0

. 원시 자바 스크립트에서 실험을 해본 적이 있는데, 창이나 문서에 붙일 때조차 Ctrl-A 이벤트를 얻기 위해 keypress가 아닌 keydown을 가져야한다고 생각합니다. 그래서 나는 이것이 내가 지금 할 수있는 최선의 방법이라고 생각한다. 감사! –

관련 문제