3

私は2つScrolledCompositeの を持っており、次のように垂直スクロール位置を同期しています:

final ScrollBar vScroll1 = canvasScroll.getVerticalBar();
final ScrollBar vScroll2 = titleScroll.getVerticalBar();

vScroll1.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
        titleScroll.setOrigin(titleScroll.getOrigin().x, canvasScroll.getOrigin().y);
    }
});

vScroll2.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
        canvasScroll.setOrigin(canvasScroll.getOrigin().x, titleScroll.getOrigin().y);
    }
});

両方のスクロールバーが表示されることを除いて、これは正常に機能しますScrolledComposites。1 つのスクロールバーのみを表示したいScrolledCompositeので、それらの可視性の 1 つを false に設定します。

vScroll2.setVisible(false);

これは効果がありません。ScrolledCompositeまた、フラグなしでインスタンス化しようとしましSWT.V_SCROLLたが、上記のコードを実行すると null ポインター例外が発生します。スクロールバーはそこにある必要があります。非表示にしたいだけです。それは可能ですか?

4

2 に答える 2

5

簡単な答えは「いいえ」です。

またはScrolledCompositeなしでを作成すると、スクロールできなくなります。つまり、または 関連するメソッドを呼び出しても何も起こりません。SWT.H_SCROLLSWT.V_SCROLLsetOrigin(Point)

一方、スクロールバーを有効にして非表示にしたい場合、OS はあなたの決定を上書きします。スクロール バーは OS によって制御されます。つまり、表示するかどうかは OS によって決定されます。setVisible(false)a の呼び出しScrollBarは、OS へのヒントにすぎません。それに従うか、従わないか...

悪い知らせを伝えて申し訳ありません:\


を別のものにラップして、 (サイズを変更することにより)含まれているスクロールバーを強制的に「トリミング」することもできますが、これはハックのようなものです。ScrolledCompositeCompositeScrolledComposite

于 2014-01-24T14:54:59.100 に答える