经过一凡研究,终于搞定,三步
第一步:
自定义Document,例如我使用BasicHTML里面的BasicDocument。
添加如下方法:
public void setBodyAttributes(Element e,
AttributeSet s,boolean replace) {
// TODO Auto-generated method stub
try {
writeLock();
// Make sure we send out a change for the length of theparagraph.
int offset = e.getStartOffset();
int length = Math.max(0, e.getEndOffset()- offset);
DefaultDocumentEvent changes =
newDefaultDocumentEvent(offset, length,
DocumentEvent.EventType.CHANGE);
AttributeSet sCopy = s.copyAttributes();
MutableAttributeSet attr =
(MutableAttributeSet) e.getAttributes();
changes.addEdit(new AttributeUndoableEdit(e, sCopy, replace));
if (replace) {
attr.removeAttributes(attr);
}
attr.addAttributes(s);
changes.end();
fireChangedUpdate(changes);
fireUndoableEditUpdate(new UndoableEditEvent(this, changes));
} finally {
writeUnlock();
}
}
第二步:BasicDocument设置
editorPane.setDocument(newBasicDocument());
第三步:具体编码:
/**
* Html背景颜色
*
* @param editor
* @param fg
*/
public static void setBodyBackground(JTextPane editor, Colorfg){
BasicDocument doc = (BasicDocument) editor.getDocument();
Element root = doc.getDefaultRootElement();
Element body = null;
for (int i = 0; i < root.getElementCount(); i++)
{
if ("body".equalsIgnoreCase(root.getElement(i).getName()))
{
body = root.getElement(i);
break;
}
}
if ( null != body)
{
SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttributes(body.getAttributes());
Object bgColor = attr.getAttribute(CSS.Attribute.BACKGROUND_COLOR);
if (null == bgColor)
{
bgColor = attr.getAttribute(HTML.Attribute.BGCOLOR);
attr.removeAttribute(HTML.Attribute.BGCOLOR);
}
if(Constants.colorToHex(fg).equals(bgColor))
{
return;
}
attr.removeAttribute(CSS.Attribute.BACKGROUND_COLOR);
StyleConstants.setBackground(attr, fg);
doc.setBodyAttributes(body, attr, true);
}
}
大功告成!!!!!