首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态添加的内容无法正确滚动(JScrollPane中的JTextPane)

问动态添加的内容无法正确滚动(JScrollPane中的JTextPane)
EN

Stack Overflow用户
提问于 2018-08-21 08:19:01
回答 1查看 77关注 0票数 0

JScrollPane(JTextPane)的以下行为似乎超出了我的工资级别:

我已经在我的框架中添加了一个scrollPane内的textPane。

代码语言:javascript
复制
    textPane = new JTextPane();
    scrollPane = new JScrollPane(textPane);

如果我通过textPane.setText("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM")设置textPane的内容,那么textPane正在扩展,并且scrollPane正在正确地执行其工作。

​

​

但是,如果我使用textPane重定向out,并使用MessageConsole重定向err,它会执行某种自动换行。我检查了MessageConsole的源代码,它没有改变textPane的任何自动换行行为。似乎是textPane.getDocument().insertString(.)导致textPane不能正确扩展。

代码语言:javascript
复制
    MessageConsole mc = new MessageConsole(textPane);
    mc.redirectOut();
    mc.redirectErr(Color.RED, null);
    mc.setMessageLines(100);

​

​

如何避免在通过textPane.getDocument().insertString(.)馈送内容时发生自动换行?3个多小时以来,我一直在尝试删除这个换行符,但没有成功,非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 08:53:19

在第一种情况下,当您添加一个没有空格的长文本字符串时,没有地方将文本拆分到新行,因此首选宽度似乎变成了文本长行的宽度。

没有必要对所有其他行上的文本进行换行,因为它们适合首选宽度。

但是,在第二种情况下,由于存在空格,因此文本窗格的默认行为是在视区已满时对文本进行换行。

这种包装是由JTextPane的Scrollable接口的默认实现引起的。getScrollableTracksViewportWidth()方法的默认实现返回true,它基本上尝试在视区的宽度内容纳所有文本,从而在可能的情况下使其换行。

如果你不想让文本换行,那就看看No Wrap Text Pane吧。它展示了如何通过让Scrollable方法返回false来更改text窗格的默认getScrollableTracksViewportWidth()行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51940037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档