2013-09-04 12 views
2

я создал композитный материал, используя следующий конструктор:Отключить MouseWheel в СВТ композита

Composite scrolledComposite = 
    new Composite(parent, SWT.V_SCROLL | SWT.H_SCROLL); 

Каждый раз, когда я использовать колесо мыши, вертикальное значение прокрутки изменяется.

Я знаю, что это поведение по умолчанию, но мне нужно отключить его. Я попробовал removeMouseWheelListener из композитного, но, похоже, это родной звонок. Это stacktrace, который может помочь понять мою проблему.

enter image description here

ответ

5

Вы можете добавить Filter к Display, который прослушивает SWT.MouseWheel событий. Вот пример для Text, но она работает одинаково для Composite:

public static void main(String[] args) 
{ 
    Display display = Display.getDefault(); 
    final Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new GridLayout(1, false)); 

    // This text is not scrollable 
    final Text text = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); 
    text.setLayoutData(new GridData(GridData.FILL_BOTH)); 

    text.setText("a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n"); 

    // This is the filter that prevents it 
    display.addFilter(SWT.MouseWheel, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      // Check if it's the correct widget 
      if(e.widget.equals(text)) 
       e.doit = false; 
      else 
       System.out.println(e.widget); 
     } 
    }); 

    // This text is scrollable 
    final Text otherText = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); 
    otherText.setLayoutData(new GridData(GridData.FILL_BOTH)); 

    otherText.setText("a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n"); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
} 

Это предотвратит скроллинг в первом Text, но он будет работать во втором.


Обратите внимание, что перед тем, как прокручивать, вам нужно щелкнуть по тексту, потому что иначе это не будет контроль фокуса.

+0

Работал отлично, спасибо! –

+0

@ DanielPeñalba Рад, что я мог бы помочь :) – Baz

Смежные вопросы