2013-06-07 6 views
0

그래서 잘 작동하는 클릭 이벤트 선택 모델이있는 셀 테이블이 있습니다. 나중에 UP 및 DOWN 화살표를 눌러 강조 표시된 행을 변경할 수 있음을 알았지 만, 끔찍한 일은 실제로 SelectionChangeEvent를 호출하기 위해 Space 키를 눌러야한다는 것입니다. 나는 UP과 DOWN 이벤트를 잡아서 SPACE 이벤트를 발사하여 조금만 속일려고 노력하고있다. 여기에 어떤 도움을 주시면 감사하겠습니다 내 코드 슬프게도 을 :(작동하지 않습니다 GWT CellTable 행을 강조 표시

 table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); 
     table.sinkEvents(Event.KEYUP); 
     table.sinkEvents(Event.KEYDOWN); 
     table.sinkEvents(32); 
     table.addHandler(new KeyUpHandler(){ 
      @Override 
      public void onKeyUp(KeyUpEvent event) 
      { 
       System.out.println(event.getNativeKeyCode()); 
       if(event.getNativeEvent().getKeyCode() == 40) 
       { 
        // down is pressed 
        int i = rows.getFilterList().indexOf(selectionModel.getLastSelectedObject())+1; 
        if(i >= 0 && i < rows.getFilterList().size()) 
        { 
//      selectionModel.setSelected(selectionModel.getLastSelectedObject(), false); 
//      selectionModel.setSelected(rows.getFilterList().get(i), true); 
//      SelectionChangeEvent.fire(selectionModel); 
         System.out.println("firing native event space"); 
         DomEvent.fireNativeEvent(Document.get().createKeyUpEvent(false, false, false, false, 32), table); 
        } 
       } 
       else if(event.getNativeEvent().getKeyCode() == 38) 
       { 
        // up is pressed 
        int i = rows.getFilterList().indexOf(selectionModel.getLastSelectedObject())-1; 
        if(i >= 0 && i < rows.getFilterList().size()) 
        { 
//      selectionModel.setSelected(selectionModel.getLastSelectedObject(), false); 
//      selectionModel.setSelected(rows.getFilterList().get(i), true); 
//      SelectionChangeEvent.fire(selectionModel); 
         System.out.println("firing native event space"); 
         DomEvent.fireNativeEvent(Document.get().createKeyUpEvent(false, false, false, false, 32), table); 
        } 
       } 
      } 

     }, KeyUpEvent.getType()); 

32

가 가정하여 공간에 대한 NativeEvent입니다처럼 내 콘솔 인쇄 뭔가!

40 
firing native event space 
32 

그렇게 가정하여 이벤트 유형 32가 객체 테이블에 대해 호출 중임

화면의 오른쪽에 셀 테이블이 없으므로 목록에서 추가 정보가 빠져 나오므로 객체가 선택되어 있는지 확인합니다. 모든 정보를 보여주십시오. 나는 UP과 DOWN을 눌러 RHS 정보가 바뀌고 SPACE를 눌러 정보 변경을 요구할 필요가 없다.

+0

나는 메모리를 기반으로 말하고 있지만, 나는 시간이 있다면 나는 방법으로 table.setKeyboardSelectedRow (row, stealFocus)를 사용했다. 나는 혼자 테스트 할 것이지만, 시도해 볼 가치가있다. 기본적으로 KEY_UP 이벤트를 캡처하는 경우 row = actualRow -1 (및 viceversa)입니다. 행운을 빕니다! – apanizo

답변

0

이상적으로 선택 내부를 들여다 보는 것이 이상적이다. 특히 DefaultKeyboardSelectionHandler은 키보드 탐색의 기본 구현이며 DefaultSelectionEventManager은 스페이스 바/클릭 (모두 CellPreviewEvent.Handlers)을 사용하는 선택 동작의 기본 구현입니다.

어쨌든 setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION)을 사용하여 키보드 선택 내용이 기본 SelectionModel에 바인딩되도록 할 수 있습니다. 그것은 당신의 사용 케이스 괜찮을거야. CellList showcase sample의 경우와 매우 비슷합니다 (선택 API는 셀 위젯에서 동일합니다).

+0

setKeyboardSelectionPolicy (KeyboardSelectionPolicy.BOUND_TO_SELECTION)를 사용해 주셔서 감사합니다. 어느 시점에서 내 자신의 KeyboardSelection 핸들러를 작성해야 할 필요가 있습니다. – Sheogora