为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2021-08-04 10:31:44
以下行为JScrollPane(JTextPane)似乎高于我的工资:我在一个 scrollPane 里面添加了一个 textPane 到我的框架中。    textPane = new JTextPane();     scrollPane = new JScrollPane(textPane);如果我通过 设置 textPane 的内容,则 textPanetextPane.setText("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM")正在扩展并且 scrollPane 正在正确执行其工作。但是,如果我textPane用来重定向out和err使用MessageConsole,它会进行某种自动换行。我检查了 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 个多小时没有成功,非常感谢您的帮助。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

在第一种情况下,当您添加一长串没有空格的文本时,文本没有地方可以拆分为新行,因此首选宽度似乎变成了长文本行的宽度。

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

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

这种包装是由ScrollableJTextPane 接口的默认实现引起的。该getScrollableTracksViewportWidth()方法的默认实现返回true,它基本上尝试适应视口宽度中的所有文本,使其在可能的情况下换行。

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


查看完整回答
反对 回复 2021-08-04
  • 1 回答
  • 0 关注
  • 279 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信