5

私は ScrolledComposite を持っていますが、その内容は切り捨てられています。Google で検索したところ、これが Windows の既知の問題であることを認識しています。

私が見つけることができる唯一の提案された回避策は、canvas.scroll 機能を使用することです。

問題の経過を考えると、より良い回避策があるかどうか疑問に思っていましたか?

ありがとうございました!

(編集: 執筆時点でのリンクは次のとおりです: http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java ?view=markup&content-type=text%2Fvnd.viewcvs-markup&revision=HEAD )

4

1 に答える 1

3

(あなたが投稿したリンクは400エラーを出しました)

私の問題が同じかどうかはわかりませんが、ScrolledComposite でも切り捨ての問題に遭遇しました。問題は、コンポジットのサイズを変更してスクロールすると、スクロールバーが表示されるようになったときに、コントロールがスクロールバーが占めるスペースを考慮していないことでした。これを解決するために、スクロールされたコンポジットの Resize リスナーに一種の再帰的なコードを追加しました。

コンテンツ コンポジットのサイズを設定したら、scrolledComposite のスクロールバー (getVerticalBar() など) が表示されたかどうかを確認します。その場合は、新しい Resize イベントをリスナーに送信します。これが私のコードのスニペットです...

public void handleEvent(Event event)
{
    int newWidth = scrolledComposite.getSize().x;
    boolean hasScroll = false;
    ScrollBar scrollBar = scrolledComposite.getVerticalBar();
    if (scrollBar.isVisible())
    {
        hasScroll = true;
        newWidth -= scrolledComposite.getVerticalBar().getSize().x;
    }
    newWidth -= 8;
    Point size = contentComposite.computeSize(newWidth, SWT.DEFAULT);
    contentComposite.setSize(size);

    int scroll_multiplier = size.y / 50;
    scrollBar.setIncrement(scroll_multiplier);

    /**
     * If the scroll bar became visible because of the resize, then
     * we actually need to resize it again, because of the scroll
     * bar taking up some extra space.
     */
    if (scrollBar.isVisible() && !hasScroll)
    {
        scrolledComposite.notifyListeners(SWT.Resize, null);
    }
}

お役に立てれば!

編集:うわー、OPの日付に気づきませんでした. これがいずれかの方法で誰かを助けることを願っています...

于 2011-02-22T17:18:21.030 に答える