2011-10-26 4 views
9

행을 클릭하면 선택 영역이 토글되도록 CellList를 설정하고 싶습니다. Ctrl 키를 누른 상태에서 여러 행을 선택할 수 있습니다.GWT CellList 클릭하여 토글 선택 (다중 선택)

변경하려면 무엇을 변경해야합니까?

class ToggleEventTranslator<T> implements DefaultSelectionEventManager.EventTranslator<T> { 
    @Override 
    public boolean clearCurrentSelection(final CellPreviewEvent<T> event) { 
     return false; 
    } 

    @Override 
    public SelectAction translateSelectionEvent(final CellPreviewEvent<T> event) { 
     return SelectAction.TOGGLE; 
    } 

} 


MultiSelectionModel<ObjProxy> multiSelectionModel = new MultiSelectionModel<ObjProxy>(); 

    ocjCellList.setSelectionModel(multiSelectionModel, DefaultSelectionEventManager 
      .<ObjProxy> createCustomManager(new ToggleEventTranslator<ObjProxy>())); 

답변

8
list.addCellPreviewHandler(new Handler<T>() { 

     @Override 
     public void onCellPreview(final CellPreviewEvent<T> event) { 

      if (BrowserEvents.CLICK.equals(event.getNativeEvent().getType())) { 

       final T value = event.getValue(); 
       final Boolean state = !event.getDisplay().getSelectionModel().isSelected(value); 
       event.getDisplay().getSelectionModel().setSelected(value, state); 
       event.setCanceled(true); 
      } 
     } 
}); 


private final MultiSelectionModel<T> selectModel = new MultiSelectionModel<T>(); 

final Handler<T> selectionEventManager = DefaultSelectionEventManager.createCheckboxManager(); 
list.setSelectionModel(selectModel, selectionEventManager); 
+0

'selectModel'정의는 어떻게 생겼습니까? – Carl

+0

이 코드를 CellList로 시도했지만 여러 항목을 선택할 수 없습니다. 구현이 더 있습니까? – Carl

+0

좋은 선택인데,이 선택 모델을 사용하면 여러 항목을 선택할 수 있어야합니다. 프라이빗 final MultiSelectionModel selectModel = 새로운 MultiSelectionModel (); –

3
당신이 체크 박스의 열을 추가 여부

"여부, 당신은 add a cell preview handler해야합니다. 하나는 DefaultSelectionEventManager을 사용하는 것입니다 정의하는 가장 쉬운 방법은, 하나 체크 박스 열 또는 creating a custom one와 조합에 checkbox manager을 사용 (당신은 ')는 toggle action로 클릭 이벤트를 매핑 할 거라고 당신은 GWT Showcase에, 그것은 사용하는 체크 박스의 변형을 볼 수 있습니다

;. 그것은 동시에 CellPreviewEvent.Handler를 추가하는 두 개의 인수를 사용하여 setSelectionModel 오버로드를 사용합니다. "

(this answer에 신용) 게시물에 대한

+1

감사합니다. CellList에 어떻게 적용됩니까? CellTable을 사용하여 Toggle-on-click 동작을 수행하는 것은 간단하지만 CellList로 작업 할 수 없었습니다. –