Java 使用HTMLDocument在JTextPane中启用自动换行

Java 使用HTMLDocument在JTextPane中启用自动换行,java,html,swing,word-wrap,jtextpane,Java,Html,Swing,Word Wrap,Jtextpane,无论在哪里,我都能看到人们在JTextPane中寻找实现单词包装的方法的答案,但没有一种方法适合我。我正在使用一个HTMLDocument(显示“text/html”内容),但到目前为止,我还没有发现任何有用的东西。JTextPane总是使JScrollPane水平滚动。我需要JTextPane可以滚动,但只能垂直滚动 任何人都有一个显示HTML内容的word wrappingJTextPane的可行演示吗?以此为例来实现自定义wrapping(无论您需要什么) 这个问题有好几个重复的答案,但

无论在哪里,我都能看到人们在
JTextPane
中寻找实现单词包装的方法的答案,但没有一种方法适合我。我正在使用一个
HTMLDocument
(显示
“text/html”
内容),但到目前为止,我还没有发现任何有用的东西。
JTextPane
总是使JScrollPane水平滚动。我需要JTextPane可以滚动,但只能垂直滚动


任何人都有一个显示HTML内容的word wrapping
JTextPane
的可行演示吗?

以此为例来实现自定义wrapping(无论您需要什么)


这个问题有好几个重复的答案,但我发现没有一个答案可以解决这个问题。这个类基于Stanislav的一个解决方案,它解决了一个类似的纯文本包装问题,但做了一些修改。此解决方案使用Java 1.7.055进行了测试

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);
                    }
                }
            }
        }
    }
}

杰出的第一个成功了。我以前试过第二个,但没有成功。谢谢这是唯一对我有效的解决方案。然而,我有一些问题,背对背(背对背,背对背)的小图像没有空间或文字分开。例如,一个长串的表情符号之间没有任何内容,仍然会出现与“很长的单词”问题相同的症状。如果我找到了一个简单的修复方法,你可以在里面编辑,我会再发表评论。非常感谢。几个月来,我一直在为JTextPane搜索HTMLEditorKit实现,它支持单词换行而不是字母换行。在我使用StanislavL的代码之前,它只支持看起来很糟糕的换行符。然而,与StanislavL的代码相反,您的版本并没有突出显示超链接。你知道怎么解决这个问题吗?这将对我有很大帮助,因为我不知道如何改编/编写自定义的HTMLEditorKit。@trinity420该
HTMLEditorKit
支持带有一些扩展的HTML 3.2版,因此您需要遵守当时可用的样式元素。我建议发布一个新问题并链接到这里,因为答案太长,无法发表评论。