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

时间:2018-08-21 00:19:01

标签: java swing jscrollpane jtextpane

JScrollPane(JTextPane)的以下行为似乎超出我的薪水范围:

我已在scrollPane中添加了textPane到框架中。

    textPane = new JTextPane();
    scrollPane = new JScrollPane(textPane);

如果我通过textPane.setText("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM")设置textPane的内容,则textPane会扩展,而scrollPane会正确执行其工作。

enter image description here

但是,如果我使用textPane使用MessageConsole来重定向outerr,它会进行自动换行。我检查了MessageConsole的来源,它没有改变textPane的自动换行行为。看来textPane.getDocument().insertString(.)导致textPane无法正确展开。

    MessageConsole mc = new MessageConsole(textPane);
    mc.redirectOut();
    mc.redirectErr(Color.RED, null);
    mc.setMessageLines(100);

enter image description here

通过textPane.getDocument().insertString(.)传送内容时,如何避免自动换行?我已经尝试删除此换行符超过3小时,但未成功,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在第一种情况下,当您添加一长串不带空格的文本时,就没有位置将文本拆分为新行,因此,似乎首选宽度成为长文本行的宽度

其他所有行上的文本都不需要换行,因为它们适合首选宽度。

但是,在第二种情况下,有空格,因此文本窗格的默认行为是在视口已满时自动换行。

此包装是由JTextPane的Scrollable接口的默认实现引起的。 getScrollableTracksViewportWidth()方法的默认实现返回true,该方法基本上会尝试将所有文​​本适合视口的宽度,并在可能时进行换行。

如果您不希望自动换行,请查看No Wrap Text Pane。它显示了如何通过使Scrollable方法返回getScrollableTracksViewportWidth()来更改文本窗格的默认false行为。