如何在 ScrolledComposite 中显示多行文本?
How to display text with many lines inside a ScrolledComposite?
我在 ScrolledComposite
中有一个 StyledText
小部件 (SWT),它应该显示日志文件的内容。不幸的是,日志文件中有数千行,所以我到了小部件在大约 2200 行后切断文本的地步。
我发现 this post that refers to this report 指出 windows 中的小部件存在高度限制,我的理论是我已经达到了该限制。
我的问题是我该如何处理这个问题。显示包含那么多行的文本的解决方法是什么?
编辑:
我发现只有在 ScrolledComposite
中使用 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.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();
}
}
我认为没有必要将 StyledText
包装成 ScrolledComposite
。 StyledText
必要时会自行显示滚动条。
我建议使用不带 ScrolledComposite
的 StyledText
。
StyledText
当然也有它能够容纳的文本的限制。但是,此限制应远高于 2200 行。如果 StyledText
仍然溢出,那么您必须截断要显示的日志。
尽管@Rüdiger Herrmann 帮助我解决了我的问题,但我仍然觉得我应该帮助那些可能遇到与我相同的问题但没有摆脱 ScrolledComposite
可能性的人。
因此我想 link this post 解决 ScrolledComposite
问题。
我在 ScrolledComposite
中有一个 StyledText
小部件 (SWT),它应该显示日志文件的内容。不幸的是,日志文件中有数千行,所以我到了小部件在大约 2200 行后切断文本的地步。
我发现 this post that refers to this report 指出 windows 中的小部件存在高度限制,我的理论是我已经达到了该限制。
我的问题是我该如何处理这个问题。显示包含那么多行的文本的解决方法是什么?
编辑:
我发现只有在 ScrolledComposite
中使用 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.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();
}
}
我认为没有必要将 StyledText
包装成 ScrolledComposite
。 StyledText
必要时会自行显示滚动条。
我建议使用不带 ScrolledComposite
的 StyledText
。
StyledText
当然也有它能够容纳的文本的限制。但是,此限制应远高于 2200 行。如果 StyledText
仍然溢出,那么您必须截断要显示的日志。
尽管@Rüdiger Herrmann 帮助我解决了我的问题,但我仍然觉得我应该帮助那些可能遇到与我相同的问题但没有摆脱 ScrolledComposite
可能性的人。
因此我想 link this post 解决 ScrolledComposite
问题。