2010-06-28 9 views
3

Composite을 확장하고 FocusableHasFocusHandlers을 구현하는 사용자 정의 위젯을 구현할 예정입니다.GWT FocusPanel, 탭 키 및 포커스 핸들러

위젯에는 위젯을 초기화하는 데 사용하는 FocusPanel에 두 개의 위젯이 포함되어 있습니다. 내가 초점 패널에서 FocusableHasFocusHandlers의 이행을 위임

public CustomBox() { 
    panel = new VerticalPanel(); 
    ... 
    panel.add(caption); 
    panel.add(icon); 
    ... 
    focusPanel = new FocusPanel(panel); 
    initWidget(focusPanel); 
} 

, 예를 들면 :

@Override 
public void setFocus(boolean focused) { 
    focusPanel.setFocus(focused); 
} 

@Override 
public void setTabIndex(int index) { 
    focusPanel.setTabIndex(index);   
} 

@Override 
public HandlerRegistration addFocusHandler(FocusHandler handler) { 
    return focusPanel.addFocusHandler(handler); 
} 

그리고 그 후 내가 어떤에서 포커스를 설정 setFocus(true)을 사용할 수 있습니다 내 생성자는 같이 보입니다 내 개체 및 setTabIndex() 탭 인덱스를 설정할 수 있습니다. Tab 키도 예상대로 작동하지만 문제는 addFocusHandler()과 함께 추가 된 핸들러의 onFocus() 메서드가 호출되지 않으므로 포커스 이벤트를 처리 할 수 ​​없다는 것입니다.

objets의 스타일을 :focus CSS 선택자로 변경하기 때문에 초점이 바뀌고 있다는 것을 알고 있습니다.

포커스 핸들러가 호출되지 않는 이유는 무엇입니까?

답변

0

포커스 이벤트 처리는 까다 롭거나 변덕니다. GWT는 필요할 때 숨겨진 입력 필드를 FocusPanel DIV에 추가하여 쉽게 만들 수 있습니다. 다음은 jQuery 문서에서 발췌 한 내용입니다.

포커스가 발생하면 요소로 포커스 이벤트가 전송됩니다. 이 이벤트는 양식 요소 (< 입력 >, < 선택 > 등)와 링크 (< a href >)와 같은 제한된 요소 집합에 암시 적으로 적용됩니다. 최근 브라우저 버전에서는 이벤트를 명시 적으로 요소의 tabindex 속성을 설정하여 모든 요소 유형을 포함하도록 확장 할 수 있습니다. 요소는 Tab 키와 같은 키보드 명령을 사용하거나 요소를 마우스로 클릭하여 포커스를 얻을 수 있습니다.

나는 당신의 문제에 대한 해결책을 모르지만, 내 생각 엔 매우 HTML/browser/dom 관련 이벤트 처리를 엉망으로 만든다. 예를 들어 caption 또는 iconFocusPanel입니까? 이는 포커스 이벤트가 어떻게 발생하는지에 영향을 줄 수 있습니다.