我正在尝试创建一个包含显示在 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 Label 和 SWT Text