可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Everywhere I read answers of people finding ways of enabling word wrapping in a JTextPane
, but none of them work for me. I'm using an HTMLDocument
(to display "text/html"
content) and nothing that I have found so far got it to work. The JTextPane
always cause the JScrollPane to scroll horizontally. I need the JTextPane to be scrollable, but only vertically.
Would anyone have a workable demo of a word wrapping JTextPane
displaying HTML content?
回答1:
回答2:
There are several duplicates of this question, and many answers, but none that I have found have a single-component solution to the problem. This class is based on one of Stanislav's solutions to a similar problem with plain-text wrapping, with a few changes. This solution is tested with 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); } } } } } }