JScrollPane(JTextPane)
的以下行为似乎超出我的薪水范围:
我在scrollPane中添加了一个textPane到我的框架中。
textPane = new JTextPane();
scrollPane = new JScrollPane(textPane);
如果我通过
textPane.setText("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM")
设置textPane的内容,则textPane会展开,而scrollPane会正确执行其工作。但是,如果我使用
textPane
重定向使用MessageConsole的out
和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小时,但仍未成功,非常感谢您的帮助。 最佳答案
在第一种情况下,当您添加一长串不带空格的文本时,就没有位置将文本拆分为新行,因此,似乎首选宽度变成了长文本行的宽度。
由于其他所有行都适合首选宽度,因此不需要包装所有其他行上的文本。
但是,在第二种情况下,存在空格,因此文本窗格的默认行为是在视口已满时自动换行。
这种包装是由JTextPane的Scrollable
接口的默认实现引起的。 getScrollableTracksViewportWidth()
方法的默认实现返回true
,它基本上试图将所有文本适合视口的宽度,并在可能的情况下进行换行。
如果您不希望自动换行,请查看No Wrap Text Pane。它显示了如何通过使Scrollable
方法返回getScrollableTracksViewportWidth()
来更改文本窗格的默认false
行为。