我在shell上有一个Text控件
Text text = new Text(contentComp, SWT.NONE | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
其文本值将由后台线程设置。例如,线程可能会向Text附加1000行。我想让文本在其内容更新时自动在垂直滚动条上滚动。我试图在其Modify事件监听器中设置选择,但它不起作用。知道怎么做吗?我无法使用StyledText,因此没有可用的setTopIndex方法。感谢。
答案 0 :(得分:0)
这是一种可以按代码滚动(RAP)文本小部件的变通方法。但它有局限性。我不确定这个问题是否有一个很好的解决方案。以下是解决方法:使用ScrolledComposite作为Text小部件的父级。
ScrolledComposite sc = new ScrolledComposite(parent, SWT.NONE|SWT.V_SCROLL);
Text text = new Text(sc, SWT.NONE|SWT.MULTI);
重点是在附加新数据时更新ScrollableComposite#setMinHeight(int)。如果在修改侦听器中完成此操作,则当文本大小变得大于父级上的默认值时,sc和text都会显示滚动条。它看起来有点奇怪,但只要正确更新了setMinHeight(int),就可以调用
sc.setOrigin(sc.getOrigin().x, Integer.MAX_VALUE);
将文本向下滚动到底部。
此解决方法的另一个问题是,如果您需要处置控件并稍后使用之前附加的数据重新创建它们,则自动滚动将不再起作用,因为文本将调整大小以适应sc因此sc minHeight无法滚动。
答案 1 :(得分:0)
我无法使用ScrolledComposite
来获得解决方案。输出已写入Text
字段,但我看不到。就像ScrolledComposite
正在隐藏文本。
相反,我可以像这样工作:
Text outputText = new Text(parent, SWT.NONE | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
outputText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent event) {
Text text = (Text) event.widget;
// position the cursor after the last character
text.setSelection(text.getCharCount());
}
});