2009-11-20 4 views
1

Использование автономных SWT Полосы прокрутки - это что-то вроде взлома (с использованием this workaround), но это можно сделать. Вот отрывок:События мыши на SWT Полоса прокрутки

ScrolledComposite scrolledComposite = new ScrolledComposite(
       parent, SWT.V_SCROLL); 
ScrollBar scrollbar = scrolledComposite.getVerticalBar(); 
Shell tip = new Shell(UserInterface.getShell(), SWT.ON_TOP 
       | SWT.NO_FOCUS | SWT.TOOL); 
// ..stylize and fill the tooltip.. 

Теперь то, что я пытаюсь сделать, это контролировать, когда пользователь взаимодействует с скроллинга. В частности, я хочу знать, когда пользователь перетаскивает полосу прокрутки — и когда она была выпущена —, чтобы отобразить всплывающую подсказку в стиле Office 2007, показывающую, с какой страницы расположена полоса прокрутки.

Word-style scrolling tooltip

В настоящее время у меня есть следующий код, который отображает всплывающую подсказку:

scrollbar.addSelectionListener(new SelectionListener() { 
    public void widgetDefaultSelected(SelectionEvent event) {} 
    public void widgetSelected(SelectionEvent event) { 
     tip.setVisible(true); 
    } 
} 

Казалось бы, логично то, чтобы подсказка исчезает при отпускании кнопки мыши:

scrollbar.addListener(SWT.MouseUp, new Listener() { 
    public void handleEvent(Event event) { 
     tip.setVisible(false); 
    } 
}); 

Тем не менее, ни scrollbar, ни scrolledComposite, кажется, отвечают на вопросы SWT.MouseUp ev когда пользователь взаимодействует с полосой прокрутки.

В настоящее время у меня есть обходное решение, которое скрывает кончик после таймаута, но я не удовлетворен этим. Любые идеи будут оценены наиболее высоко!

ответ

2

ScrollBar сказал это:

Когда widgetSelected называется, поле объекта подробно события содержит один из следующих значений: SWT.NONE - для конца перетаскивания. SWT.DRAG. SWT.HOME. SWT.END. SWT.ARROW_DOWN. SWT.ARROW_UP. SWT.PAGE_DOWN. SWT.PAGE_UP. widgetDefaultSelected - не вызывается.

Так что мое предложение - получить подсказку и исчезнуть, чтобы проверить тип события.detail.

public void widgetSelected(SelectionEvent event) { 
    tip.setVisible(event.detail != SWT.NONE); 
} 
+0

Отлично! Я посмотрю, действительно ли это будет первым делом с утра. –

+0

Работает как очарование! Большое спасибо! –

-1

Пол,

попробуйте использовать метод addMouseEvent из прокрутки объекта. Например:

Scrollable scrollable = scrollbar.getParent(); 
scrollable.addMouseListener(new MouseListener() { 
    void mouseDoubleClick(MouseEvent e) { ... } 
    void mouseDown(MouseEvent e) { ... } 
    void mouseUp(MouseEvent e) { ... } 
}); 

На самом деле, я не знаю, будет ли этот подход работать. Но это попытка. Удачи! Javadoc

+0

Хорошего предложения, спасибо. Это просто решает обратно в ScrolledComposite, однако, который реагирует только на события внутри самого композита, а не на полосы прокрутки. –

3
scrollBar.addSelectionListener(new SelectionListener() { 
    public void widgetDefaultSelected(SelectionEvent e) { 
    } 

    public void widgetSelected(SelectionEvent e) { 
     if (e.detail == SWT.NONE) { 
      // end of drag 
      System.out.println("Drag end"); 
     } 
     else if (e.detail == SWT.DRAG) { 
      // drag 
      System.out.println("Currently dragging"); 
     } 
    } 
}); 

Надеется, что это поможет ... Но я вижу проблему с использованием колеса прокрутки, который бросает несколько конечных перетащить события ...

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

  • Нет связанных вопросов^_^