1

スタンドアロンの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スタイルのスクロールツールチップ

現在、ツールチップを表示する次のコードがあります。

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も、応答することもありません。scrolledCompositeSWT.MouseUp

現在、タイムアウト後にチップを非表示にする回避策がありますが、これには満足していません。どんな洞察も大歓迎です!

4

3 に答える 3

3

Scrollbarのjavadocは次のように述べています。

widgetSelectedが呼び出されると、イベントオブジェクトの詳細フィールドに次のいずれかの値が含まれます。SWT.NONE-ドラッグの終了。SWT.DRAG。SWT.HOME。SWT.END。SWT.ARROW_DOWN。SWT.ARROW_UP。SWT.PAGE_DOWN。SWT.PAGE_UP。widgetDefaultSelectedは呼び出されません。

したがって、私の提案は、ツールチップを表示および非表示にすることで、event.detailタイプを確認することです。

public void widgetSelected(SelectionEvent event) {
    tip.setVisible(event.detail != SWT.NONE);
}
于 2009-11-25T21:29:10.477 に答える
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");
        }
    }
});

これがお役に立てば幸いです...しかし、複数のドラッグエンドイベントをスローするマウスホイールの使用に問題があることがわかります...

于 2009-12-16T09:34:28.243 に答える
-1

ポール、

ScrollableオブジェクトからaddMouseEventメソッドを使用してみてください。例えば:

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

実際、このアプローチが機能するかどうかはわかりません。しかし、それは試みです。幸運を!

于 2009-11-20T15:04:12.487 に答える