使用 HTMLDocument 在 JTextPane 中启用自动换行
Posted
技术标签:
【中文标题】使用 HTMLDocument 在 JTextPane 中启用自动换行【英文标题】:Enabling word wrap in a JTextPane with HTMLDocument 【发布时间】:2011-12-10 07:58:24 【问题描述】:我到处都读到人们在JTextPane
中寻找启用自动换行的方法的答案,但它们都不适合我。我正在使用htmlDocument
(显示"text/html"
内容),到目前为止我没有发现任何东西让它工作。 JTextPane
总是导致 JScrollPane 水平滚动。我需要 JTextPane 可滚动,但只能垂直滚动。
有没有人有一个可使用的自动换行演示 JTextPane
显示 HTML 内容?
【问题讨论】:
【参考方案1】:以此为例来实现自定义包装(无论您需要什么) http://java-sl.com/tip_html_letter_wrap.html
http://java-sl.com/wrap.html
【讨论】:
太棒了!第一个工作。我之前尝试过第二个,但没有成功。谢谢!【参考方案2】:这个问题有好几个重复项,也有很多答案,但我发现没有一个问题有单一组件的解决方案。此类基于 Stanislav 对纯文本换行的类似问题的解决方案之一,并进行了一些更改。此解决方案已使用 Java 1.7.0_55 进行测试。
import javax.swing.text.Element;
import javax.swing.text.LabelView;
import javax.swing.text.StyleConstants;
import javax.swing.text.View;
import javax.swing.text.ViewFactory;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
public class WrappedHtmlEditorKit extends HTMLEditorKit
private static final long serialVersionUID = 1L;
private ViewFactory viewFactory = null;
public WrappedHtmlEditorKit()
super();
this.viewFactory = new WrappedHtmlFactory();
return;
@Override
public ViewFactory getViewFactory()
return this.viewFactory;
private class WrappedHtmlFactory extends HTMLEditorKit.HTMLFactory
@Override
public View create(Element elem)
View v = super.create(elem);
if (v instanceof LabelView)
Object o = elem.getAttributes().getAttribute(StyleConstants.NameAttribute);
if ((o instanceof HTML.Tag) && (o == HTML.Tag.BR))
return v;
return new WrapLabelView(elem);
return v;
private class WrapLabelView extends LabelView
public WrapLabelView(Element elem)
super(elem);
return;
@Override
public float getMinimumSpan(int axis)
switch (axis)
case View.X_AXIS:
return 0;
case View.Y_AXIS:
return super.getMinimumSpan(axis);
default:
throw new IllegalArgumentException("Invalid axis: " + axis);
【讨论】:
这是唯一对我有用的解决方案。然而,我遇到了一些不由空格或单词分隔的小图像的背靠背(背靠背,背靠背)问题。例如,一长串之间没有任何内容的表情仍然会遭受“非常长的单词”问题的相同症状。如果我找到一个可以编辑的简单修复,我会再次发表评论。 非常感谢。我从字面上搜索了几个月的 HTMLEditorKit 实现,用于支持 WORD 换行而不是 LETTER 换行的 JTextPane。在我使用 StanislavL 的代码之前,它只支持看起来很糟糕的字母换行。然而,与 StanislavL 的代码相反,您的版本没有突出显示和下划线超链接。你知道如何解决这个问题吗?这对我有很大帮助,因为我不知道如何适应/编写自定义 HTMLEditorKit。 @trinity420HTMLEditorKit
支持带有一些扩展的 HTML 3.2 版,因此您需要遵守当时可用的样式元素。我建议在此处发布一个新问题并将其链接,因为答案太长,无法发表评论。以上是关于使用 HTMLDocument 在 JTextPane 中启用自动换行的主要内容,如果未能解决你的问题,请参考以下文章
从 HTML 字符串创建 HTMLDocument(在 Java 中)