JScrollPane(JTextPane)的以下行为似乎超出了我的工资级别:
我已经在我的框架中添加了一个scrollPane内的textPane。
textPane = new JTextPane();
scrollPane = new JScrollPane(textPane);如果我通过textPane.setText("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM")设置textPane的内容,那么textPane正在扩展,并且scrollPane正在正确地执行其工作。

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

如何避免在通过textPane.getDocument().insertString(.)馈送内容时发生自动换行?3个多小时以来,我一直在尝试删除这个换行符,但没有成功,非常感谢您的帮助。
发布于 2018-08-21 08:53:19
在第一种情况下,当您添加一个没有空格的长文本字符串时,没有地方将文本拆分到新行,因此首选宽度似乎变成了文本长行的宽度。
没有必要对所有其他行上的文本进行换行,因为它们适合首选宽度。
但是,在第二种情况下,由于存在空格,因此文本窗格的默认行为是在视区已满时对文本进行换行。
这种包装是由JTextPane的Scrollable接口的默认实现引起的。getScrollableTracksViewportWidth()方法的默认实现返回true,它基本上尝试在视区的宽度内容纳所有文本,从而在可能的情况下使其换行。
如果你不想让文本换行,那就看看No Wrap Text Pane吧。它展示了如何通过让Scrollable方法返回false来更改text窗格的默认getScrollableTracksViewportWidth()行为。
https://stackoverflow.com/questions/51940037
复制相似问题