2016-10-01 7 views
0
protected Control createDialogArea(Composite parent) 
    { 
     Composite composite = new Composite(parent, SWT.NONE); 
     composite.setLayoutData(new GridData(GridData.FILL_BOTH)); 
     composite.setLayout(new GridLayout(2, false)); 
     Group consumedCmp = new Group(composite, SWT.BORDER); 
     consumedCmp.setLayout(new GridLayout(1, false)); 
     consumedCmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
     consumedCmp.setText(reg.getString("ASSIGN_AS_TXT")); 
     btnMsConsumed = new Button(consumedCmp, SWT.RADIO); 
     btnMsConsumed.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); 
     btnMsConsumed.setText(ME_CONSUMED); 
     btnRequired = new Button(consumedCmp, SWT.RADIO); 
     btnRequired.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); 
     btnRequired.setText(REQUIRED); 
     Group tableCmp = new Group(composite, SWT.BORDER); 
     tableCmp.setLayout(new GridLayout(1, false)); 
     tableCmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
     tableCmp.setText(PART_ASSIGNMENT_INDICATOR); 
     tableViewer = CheckboxTableViewer.newCheckList(tableCmp, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); 
     table = tableViewer.getTable(); 
     table.setLinesVisible(true); 
     table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
     Composite buttonCmp = new Composite(tableCmp, SWT.NONE); 
     buttonCmp.setLayout(new GridLayout(2, false)); 
     buttonCmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); 
     btnSelectAll = new Button(buttonCmp, SWT.NONE); 
     btnSelectAll.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1)); 
     btnSelectAll.setText(reg.getString("SELECT_ALL_TXT")); 
     btnSelectAll.addListener(SWT.Selection, new Listener() 
     { 
      @Override 
      public void handleEvent(Event event) 
      { 
       //tableViewer.setAllChecked(true); 
       for(TableItem item : table.getItems()) 
        item.setChecked(true); 
      } 
     }); 
     Button btnDeselectAll = new Button(buttonCmp, SWT.NONE); 
     btnDeselectAll.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)); 
     btnDeselectAll.setText(reg.getString("DESELECT_ALL_TXT")); 
     btnDeselectAll.addListener(SWT.Selection, new Listener() 
     { 
      @Override 
      public void handleEvent(Event event) 
      { 
       //tableViewer.setAllChecked(false); 
       for(TableItem item : table.getItems()) 
        item.setChecked(false); 
      } 
     }); 
     initTable(); 
     return composite; 
    } 


private void initTable() 
    { 
     Iterator iter = ind.iterator(); 
     while(iter.hasNext()) 
     { 
      TableItem item = new TableItem(table, SWT.NONE); 
// this code works 
      item.setText((String) iter.next()); 
      item.setChecked(true); 
     } 
// the below code doesnot works 
     //tableViewer.setAllChecked(true); 
    } 

누구든지 위의 사례를 제공 할 수 있습니까? 처음에는 테이블의 모든 항목을 확인해야합니다.CheckBoxTableViewer 클래스의 setAllChecked (boolean) 메소드 사용 방법은 jFace입니까?

테이블에 약 5 개의 항목이 있습니다. 기본적으로 모든 항목을 검사해야합니다. 나는 2 개의 버튼을 모두 선택하고, 모든 항목을 선택하고 모든 항목을 각각 선택 해제해야하는 모든 항목을 선택 해제합니다.

누구든지이 예제를 제공 할 수 있습니까?

+0

죄송합니다. 그러나 여기에 귀하의 문제가 무엇인지 명확하지 않습니다. 'setAllChecked'를 호출 할 때 어떤 문제점이 있습니까? 우리는 모든 코드를 작성하지 않고, 시도한 것을 보여줍니다. –

+0

greg 안녕하세요, 코드가 오랫동안 붙여 놓았 기 때문에 붙여 넣기가 어려웠습니다 ... 이제 코드를 사용하여 질문을 편집했습니다. 확인해주십시오. 여기에 setAllChecked (true) 코드가 작동하지 않습니다. 그러나 테이블의 각 항목을 확인하면 작동합니다 .. – ansariBE

답변

0

당신은 레이블 제공자와 setInput 전화와 함께 JFace는 컨텐츠 제공자를 사용해야합니다 JFace는 CheckboxTableViewer (또는 다른 JFace는 뷰어)를 사용하는 경우.

은 (는) TableItem과 같이 작성해야합니다. JFace 코드는 항목에 대해 알지 못하고 코드가 오작동합니다. 언제 당신이 결코 JFace 시청자를 사용하면 기본 테이블이나 트리 항목을 조작 할 수 있습니다.

tableViewer.setContentProvider(ArrayContentProvider.getInstance()); 

tableViewer.setLabelProvider(new LabelProvider()); 

tableViewer.setInput(ind); 

(및 TableItem의를 만드는 모든 코드 제거)

ArrayContentProvider을 :

당신은 당신이 그런 짓을 할 수 있도록 시청자에 대한 입력으로 사용할 수있는 목록 ind을 가지고있는 것 같습니다 배열 또는 List 인터페이스를 구현하는 입력을 처리 할 수 ​​있습니다.

테이블을 올바르게 사용하여 공급자를 설정하면 setAllChecked 메서드가 작동합니다.

+0

하지만 이전 버전의 응용 프로그램에서 작동했습니다. 괜찮 으면, 당신은 contentproviders를 사용해야한다는 것을 확인하는 문서를 줄 수 있습니까? 기존 코드 로직을 변경하고 싶다면 그것을 증명해야합니다. – ansariBE

+0

명시 적으로 테이블 항목을 사용하지 않는다는 문서를 찾을 수 있을지는 모르겠지만 JFace의 모든 자습서는 콘텐츠 제공 업체를 사용합니다. 이는 JFace 시청자를 사용하는 요점입니다. JFace 코드를 연구하면 테이블 내용을 완전히 제어 할 것으로 예상됩니다. 당신이 과거에 당신을 위해 일했다면 당신은 운이 좋았지 만 그것은 여전히 ​​잘못되었습니다. –

+0

코드를 단순화 할 것이므로 제안과 함께 갈 것입니다. 귀하의 제안 greg 주셔서 감사합니다! – ansariBE