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 テキストで発生します。