SWT StyledText是否有高度限制?

时间:2010-12-22 15:14:58

标签: java eclipse swt styledtext scrolledcomposite

我正在尝试创建一个包含ScrolledComposite中显示的StyledText框的应用程序。我在StyledText框中显示大量行有困难(超过2,550似乎会导致问题)。

StyledText框本身不能有滚动条,但必须可以通过ScrolledComposite滚动。由于StyledText下方和上方还有其他需要滚动的项目,我不想要多个滚动条。

因此,对于大量数据,我有一个非常大(如高度)的StyledText框似乎在一定高度后停止。

Screenshot

问题是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 Label和SWT Text

会出现此问题

2 个答案:

答案 0 :(得分:4)

这实际上是Windows限制。复合材料在窗口中可能只有一定的大小,不超过32767(像素,我假设)。

这是找到的scrolledComposite,因为它实际上不是&gt; 32767,它似乎是。而对于mainComp,实际大小是> 32767这就是我们被切断的地方。

最初我认为这是一个Eclipse错误并提交了一份报告,我被告知这是一个Windows问题/功能:https://bugs.eclipse.org/bugs/show_bug.cgi?id=333111

答案 1 :(得分:0)

也许你可以通过反过来解决这个问题并将你的“其他东西”放在StyledText中?然后使StyledText滚动而不是ScrolledComposite。 StyledText支持嵌入图像和控件,并且您能够实现侦听器(例如VerifyListener)以防止用户删除嵌入对象 - 如果这是您想要的。

以下是一些示例代码:

如果您希望控件看起来比第二个示例更好,则可以使控件占据文本区域的整个宽度(并在调整区域大小时收听事件 - 使用styledText.addListener(SWT.Resize, new Listener() ...