2016-04-05 32 views
0

Ctrl tuşa basılarak SWT ListViewer'da çok sayıda öğe seçmeye çalışıyorum. Ctrl tuşunu ve ListViewer'da basit seçimi kullanarak seçim yapmak istiyorum. Ctrl tuşunun basılıp basılmadığını görmek için bir yol bulamıyorum. Bunun için yararlı bir Dinleyici eklentisi görmüyorum. SWT ListViewer'da tuşa basma ve serbest bırakma kullanarak seçimi bilmenin bir yolu var. İşte denediğim örnek kod.Ctrl tuşunu nasıl yakalarsınız SWT ListViewer'a basın ve bırakın ListViewer

public class DummyListViewer { 

private ListViewer dummyViewer; 

    public DummyListViewer (Composite parent) { 
      dummyViewer = createListViewer(parent); 
     } 

     private ListViewer createListViewer(Composite parent) { 
      GridData data = new GridData(SWT.LEFT, SWT.LEFT, false, false); 
      ScrolledComposite scrolledParent = (ScrolledComposite) createScrolledComposite(parent, SWT.NONE); 
      final ListViewer dummyViewer= new ListViewer(scrolledParent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL| SWT.MULTI); 
      dummyViewer.getList().addKeyListener(new CtrlKeyListener()); 
      dummyViewer.setContentProvider(new ListViewerContentProvider()); 
      dummyViewer.setLabelProvider(new ListViewerLabelProvider()); 
      scrolledParent.setContent(dummyViewer.getControl()); 
      scrolledParent.setMinSize(dummyViewer.getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
      dummyViewer.getControl().setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true)); 
      return dummyViewer; 
     } 

     private Composite createScrolledComposite(Composite parent, int style) { 
      ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); 
      scrolledComposite.setLayout(new GridLayout(1, false)); 
      GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); 
      gridData.widthHint = 400; 
      gridData.heightHint = 700; 
      scrolledComposite.setLayoutData(gridData); 
      scrolledComposite.setExpandVertical(true); 
      scrolledComposite.setExpandHorizontal(true); 
      return scrolledComposite; 
     } 

     public void setInput(List<Object> input) { 
      filterViewer.setInput(input); 
     } 

     private class ListViewerContentProvider implements IStructuredContentProvider { 

      @Override 
      public void dispose() { 

      } 

      @Override 
      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 

      } 

      @Override 
      public Object[] getElements(Object inputElement) { 
       if (inputElement instanceof List) { 
        return ((List)inputElement).toArray(); 
       } 
       return null; 
      } 

     } 

     private ColumnViewerFilter filter; 



     private class ColumnViewerFilter extends ViewerFilter { 

      String value=""; //$NON-NLS-1$ 

      /** 
      * Constructor for ColumnViewerFilter to set the String on which 
      * the viewer has to be filtered on. 
      * @param value - String on which 
      * the viewer has to be filtered on. 
      */ 
      public ColumnViewerFilter(String value) { 
       this.value = value; 
      } 

      @Override 
      public boolean select(Viewer viewer, Object parentElement, Object element) { 
       if (value != null && value instanceof String && element instanceof String) { 
        if (value.equals(element)) 
         return true; 
       } 
       return false; 
      } 

     } 

     private class ListViewerLabelProvider extends ColumnLabelProvider { 

      @Override 
      public String getText(Object element) { 
       if(element instanceof String) 
        return (String)element; 
       return null; 
      } 

     } 



     private boolean CtrlkeyPressed = false; 
     private class CtrlKeyListener implements KeyListener{ 

      @Override 
      public void keyPressed(KeyEvent e) { 
      if (e.keyCode == SWT.CTRL) 
       CtrlkeyPressed = true; 

      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       if (e.keyCode == SWT.CTRL) 
       CtrlkeyPressed = false; 
      } 

     } 
    } 
+0

ListViewer'da setInput yaptığınız herhangi bir yeri göremiyorum. –

+0

Başka bir yerde DummyListViewer nesnesi oluştururken, girdiyi DummyListViewer nesnesini oluşturduktan sonra ayarlıyorum. Ama boşver, kod işe yarıyor gibi görünüyor. – Juseeth

cevap

0

Sen ListViewer içerdiği List kumanda üzerindeki addKeyListener kullanarak anahtar olaya dinleyebilirsiniz: Bazı platformlarda çoklu seçim Ctrl anahtarı kullanmayan

viewer.getList().addKeyListener(new KeyListener() { 

    @Override 
    public void keyPressed(final KeyEvent e) 
    { 
    if (e.keyCode == SWT.CTRL) 
     // TODO control pressed 
    } 

    @Override 
    public void keyReleased(final KeyEvent e) 
    { 
    if (e.keyCode == SWT.CTRL) 
     // TODO control release 
    } 

}); 

Not. Mac'te anahtarı kullanılır (SWT.COMMAND).

+0

Bunu eklemeyi denedim, ancak çağrılmadı. – Juseeth

+0

Benim için çalışıyor. Sorunuzu düzenleyin ve kodunuzu ekleyin. –

+0

Kodumu ekledim. – Juseeth