2014-09-05 179 views
0

鼠標滾輪在macosx上正常工作,但不能在windows上工作。ScrolledComposite不滾動鼠標滾輪

這裏是我的佈局結構,我實現了mousewheel listener,但沒有觸發壽。

structure

scrolledComposite.addListener(SWT.MouseWheel, new Listener() { 
     public void handleEvent(Event event) { 
      System.out.println("MOUSE WHEEL"); 
      int wheelCount = event.count; 
      wheelCount = (int) Math.ceil(wheelCount/3.0f); 
      while (wheelCount < 0) { 
       scrolledComposite.getVerticalBar().setIncrement(4); 
       wheelCount++; 
      } 

      while (wheelCount > 0) { 
       scrolledComposite.getVerticalBar().setIncrement(-4); 
       wheelCount--; 
      } 
     } 
    }); 

和我scrolledcomposite聲明:

final ScrolledComposite scrolledComposite = new ScrolledComposite(mainComposite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
    scrolledComposite.setExpandHorizontal(true); 
    scrolledComposite.setExpandVertical(true); 
    scrolledComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_MAGENTA)); 

    final Composite listComposite = new Composite(scrolledComposite, SWT.NONE); 
    GridLayout layout = new GridLayout(); 
    layout.numColumns = 1; 
    listComposite.setLayout(layout); 

    final Composite composite_3 = new Composite(listComposite, SWT.NONE); 
    GridLayout gridLayout = new GridLayout(); 
    gridLayout.numColumns = 8; 
    composite_3.setLayout(gridLayout); 

    scrolledComposite.setContent(listComposite); 
    scrolledComposite.setMinSize(listComposite.computeSize(SWT.DEFAULT,SWT.DEFAULT)); 

/////////////////實例從頭它不工作,要麼。

shell = new Shell(); 
    shell.setSize(450, 300); 
    shell.setText("SWT Application"); 
    shell.setLayout(new FormLayout()); 

    Composite composite = new Composite(shell, SWT.NONE); 
    composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_YELLOW)); 
    FormData fd_composite = new FormData(); 
    fd_composite.bottom = new FormAttachment(0, 46); 
    fd_composite.right = new FormAttachment(100); 
    fd_composite.top = new FormAttachment(0); 
    fd_composite.left = new FormAttachment(0); 
    composite.setLayoutData(fd_composite); 
    composite.setLayout(new FillLayout(SWT.HORIZONTAL)); 

    Composite composite_1 = new Composite(shell, SWT.NONE); 
    FormData fd_composite_1 = new FormData(); 
    fd_composite_1.right = new FormAttachment(0, 100); 
    fd_composite_1.top = new FormAttachment(composite, 1); 
    fd_composite_1.left = new FormAttachment(0); 
    fd_composite_1.bottom = new FormAttachment(100); 
    composite_1.setLayoutData(fd_composite_1); 

    Composite composite_2 = new Composite(shell, SWT.NONE); 
    composite_2.setLayout(new FillLayout(SWT.HORIZONTAL)); 
    FormData fd_composite_2 = new FormData(); 
    fd_composite_2.top = new FormAttachment(composite, 1); 
    fd_composite_2.left = new FormAttachment(composite_1, 1); 
    fd_composite_2.bottom = new FormAttachment(100); 
    fd_composite_2.right = new FormAttachment(100); 
    composite_2.setLayoutData(fd_composite_2); 

    ScrolledComposite scrolledComposite = new ScrolledComposite(composite_2, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
    scrolledComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_DARK_RED)); 
    scrolledComposite.setExpandHorizontal(true); 
    scrolledComposite.setExpandVertical(true); 

    Composite composite_3 = new Composite(scrolledComposite, SWT.NONE); 
    composite_3.setLayout(new GridLayout(1, false)); 

    Composite composite_4 = new Composite(composite_3, SWT.NONE); 
    composite_4.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLUE)); 

    Composite composite_5 = new Composite(composite_3, SWT.NONE); 
    composite_5.setBackground(SWTResourceManager.getColor(SWT.COLOR_MAGENTA)); 

    Composite composite_7 = new Composite(composite_3, SWT.NONE); 
    composite_7.setBackground(SWTResourceManager.getColor(SWT.COLOR_DARK_BLUE)); 

    Composite composite_6 = new Composite(composite_3, SWT.NONE); 
    scrolledComposite.setContent(composite_3); 
    scrolledComposite.setMinSize(composite_3.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
+1

你不應該自己處理滾動。請顯示你如何創建和添加'listComposite'。 – Baz 2014-09-05 12:11:25

+0

編輯我的答案並添加listcomposite聲明 – Alper 2014-09-05 12:19:34

+0

嗯,看起來很好...如果你可以創建一個[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve)(複製/粘貼轉換成簡單的SWT),我可以給它一個去看看有什麼不對。 – Baz 2014-09-05 12:33:24

回答

2

我遇到了同樣的問題,圍繞谷歌搜索後,我發現這一個:

scrolledComposite.addListener(SWT.Activate, new Listener() { 
     public void handleEvent(Event e) { 
      scrolledComposite.setFocus(); 
     } 
    }); 

它爲我工作。