I have a StyledText
widget (SWT) inside a ScrolledComposite
that should display the content of a log file. Unfortunately the log file has thousands of lines in it so that I came to the point where the widget cuts off the text after ~ 2200 lines.
I found this post that refers to this report that states that there is a height limitation for widgets in windows and my theory is that I have reached that limit.
My question is how I can deal with this. What is the workaround for displaying text with that many lines in it?
EDIT:
I found out that this does only happen, if I use the StyledText
inside a ScrolledComposite
. If I use the plain StyledText
there is no problem.
Here's the code to reproduce:
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.Display;
import org.eclipse.swt.widgets.Shell;
public class StyledTextLimit {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
ScrolledComposite scrollComp = new ScrolledComposite(shell,
SWT.H_SCROLL | SWT.V_SCROLL);
StyledText text = new StyledText(scrollComp, SWT.NONE);
text.setSize(100, 500);
scrollComp.setContent(text);
scrollComp.setExpandHorizontal(true);
scrollComp.setExpandVertical(true);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 5000; i++) {
builder.append(i);
builder.append(" ");
for (int j = 'a'; j < 'a' + 200; j++) {
builder.append((char) j);
}
builder.append("\n");
}
text.setText(builder.toString().trim());
scrollComp.setMinSize(text.computeSize(SWT.DEFAULT, SWT.DEFAULT));
// shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
I don't see a need to wrap the StyledText
into a ScrolledComposite
. The StyledText
shows scrollbars on its own when necessary.
I suggest using the StyledText
without a ScrolledComposite
.
The StyledText
certainly also has a limit on what text it is capable to hold. This limit, however, should be much higher than 2200 lines. If StyledText
still overflows, then you'll have to truncate the log to be shown.