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小时,但未成功,非常感谢您的帮助。
答案 0 :(得分:1)
在第一种情况下,当您添加一长串不带空格的文本时,就没有位置将文本拆分为新行,因此,似乎首选宽度成为长文本行的宽度
其他所有行上的文本都不需要换行,因为它们适合首选宽度。
但是,在第二种情况下,有空格,因此文本窗格的默认行为是在视口已满时自动换行。
此包装是由JTextPane的Scrollable
接口的默认实现引起的。 getScrollableTracksViewportWidth()
方法的默认实现返回true
,该方法基本上会尝试将所有文本适合视口的宽度,并在可能时进行换行。
如果您不希望自动换行,请查看No Wrap Text Pane。它显示了如何通过使Scrollable
方法返回getScrollableTracksViewportWidth()
来更改文本窗格的默认false
行为。