每个地方我都会读到人们在JTextPane
中找到启用自动换行的方法的答案,但这些都不适合我。我正在使用HTMLDocument
(显示"text/html"
内容),到目前为止我找不到任何内容。 JTextPane
总是导致JScrollPane水平滚动。我需要JTextPane可滚动,但只能垂直。
是否有人可以通过JTextPane
显示HTML内容进行自适应演示?
答案 0 :(得分:5)
以此为例,实现自定义换行(无论您需要什么) http://java-sl.com/tip_html_letter_wrap.html
答案 1 :(得分:2)
这个问题有几个重复,有很多答案,但我发现没有一个解决问题的单一组件解决方案。本课程基于斯坦尼斯拉夫针对类似问题的解决方案之一,包括纯文本包装,并进行了一些更改。此解决方案使用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);
}
}
}
}
}
}