3

ScrolledComposite 内に表示される StyledText ボックスを含むアプリケーションを作成しようとしています。StyledText ボックスに多数の行を表示するのに問題があります (2,550 を超えると問題が発生するようです)。

StyledText ボックス自体にスクロール バーがあってはなりませんが、ScrolledComposite を介してスクロール可能である必要があります。StyledText の下と上には、スクロール可能にする必要がある他の項目があり、複数のスクロール バーは必要ありません。

したがって、大量のデータを使用すると、特定の高さで停止するように見える非常に大きな (高さのように) StyledText ボックスがあります。

スクリーンショット

問題は、StyledText がその内容と同じ高さである必要があり、そうではないことです。下のギャップの理由は、含まれているコンポジットが StyledText がその高さであると報告するものをサイズ変更しているためですが、これは実際にはその高さではありません。

私の問題を説明するための単純化されたコード例を次に示します。

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class ExpandBox2
{
    public static void main(String[] args)
    {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Example");
        shell.setLayout(new FillLayout());

        ScrolledComposite scrolledComposite = new ScrolledComposite(shell, SWT.V_SCROLL);
        scrolledComposite.setLayout(new FillLayout(SWT.VERTICAL));

            Composite mainComp = new Composite(scrolledComposite, SWT.NONE);
        mainComp.setLayout(new FillLayout(SWT.VERTICAL));

        StyledText styledText = new StyledText(mainComp, SWT.NONE);
        styledText.getContent().setText(bigString());

        mainComp.setSize(mainComp.computeSize(SWT.DEFAULT, SWT.DEFAULT));

        scrolledComposite.setContent(mainComp);
        scrolledComposite.setMinSize(mainComp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        scrolledComposite.setExpandHorizontal(true);
        scrolledComposite.setExpandVertical(true);
        scrolledComposite.getVerticalBar().setIncrement(10);


        shell.setSize(400, 350);
        shell.open();
        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ()) {
                display.sleep ();
            }
        }
        display.dispose();

    }

    private static String bigString()
    {
        String big = "";

        for(int i=0;i<10000;i++)
        {
            big = big + "hello\r\n";
        }

        return big;
    }

}

更新: 興味深いことに、この問題は SWT ラベルと SWT テキストで発生します。

4

2 に答える 2

4

これは実際には Windows の制限です。コンポジットは、ウィンドウ内で特定のサイズのみで、32767 (ピクセルと思われます) を超えない場合があります。

これは実際には 32767 を超えていないため、scrolledComposite で検出されました。一方、mainComp の実際のサイズは 32767 を超えており、ここで切り捨てられました。

最初は、これは Eclipse のバグだと思っていたので、これが Windows の問題/機能であると知らされたレポートを提出しました: https://bugs.eclipse.org/bugs/show_bug.cgi?id=333111

于 2010-12-23T10:36:44.153 に答える
0

おそらく、逆に「その他のもの」をStyledText内に配置することで、この問題を解決できますか? その結果、.StyledText の代わりに StyledText をスクロールさせScrolledCompositeます。StyledText は画像とコントロールの両方の埋め込みをサポートしており、リスナー (たとえばVerifyListener) を実装して、ユーザーが埋め込みオブジェクトを削除しないようにすることができます (それが必要な場合)。

サンプルコードは次のとおりです。

コントロールを 2 番目の例よりも見栄えを良くしたい場合は、コントロールがテキスト領域の幅全体を占めるようにすることができます (そして、領域のサイズが変更されたときのイベントをリッスンします - を使用しますstyledText.addListener(SWT.Resize, new Listener() ...)。

于 2011-08-12T01:23:10.297 に答える