Я пытаюсь создать приложение, которое содержит поле StyledText, отображаемое в ScrolledComposite.У меня возникают проблемы с отображением большого количества строк в моем поле StyledText (более 2550, кажется, вызывает проблемы).
Поле 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