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?
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);
}
}
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With