猿问

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

以下行为JScrollPane(JTextPane)似乎高于我的工资:

我在一个 scrollPane 里面添加了一个 textPane 到我的框架中。

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

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

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

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

http://img2.mukewang.com/6109fc30000112d906580464.jpg

当通过 提供内容时,如何避免发生自动换行textPane.getDocument().insertString(.)?我已经尝试删除此换行符 3 个多小时没有成功,非常感谢您的帮助。


宝慕林4294392
浏览 280回答 1
1回答

精慕HU

在第一种情况下,当您添加一长串没有空格的文本时,文本没有地方可以拆分为新行,因此首选宽度似乎变成了长文本行的宽度。所有其他行上的文本不需要换行,因为它们适合首选宽度。但是,在第二种情况下,由于存在空格,因此文本窗格的默认行为是在视口已满时换行文本。这种包装是由ScrollableJTextPane 接口的默认实现引起的。该getScrollableTracksViewportWidth()方法的默认实现返回true,它基本上尝试适应视口宽度中的所有文本,使其在可能的情况下换行。如果您不希望文本换行,请查看No Wrap Text Pane。它展示了如何Scrollable通过让getScrollableTracksViewportWidth()方法 return来更改文本窗格的默认行为false。
随时随地看视频慕课网APP

相关分类

Java
我要回答