编程开发

JTextPane设置背景色的问题及解决

09-06-16 | 1 Comment |

  Swing 的 JTextPane 是非常强大的文字处理工具,它不但可以处理文本,也可以作为浏览器来显示指定的网页。利用 JTextPane 可以很轻松地开发类似 Word 之类的文字处理工具。比如要设置文本为粗体,可以这样实现:

MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr, !StyleConstants
.isBold(((HTMLEditorKit) editor.getEditorKit())
.getInputAttributes()));
setCharacterAttributes(editor, attr, false);

  设置背景色为:

MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBackground(attr, color);
setCharacterAttributes(editor, attr, false);

  看上去都没有什么问题,不过,若你的程序有保存功能,并且保存的是JTextPane生成的html,这样问题就来了。当利用getText方法取得生成的html代码时,我们发现虽然背景色的显示正确但html代码无法生成。这似乎是一个bug?不过没关系,我们可以利用HTMLEditorKit的insertHML来实现。

  生成一个Action类,继承StyledEditorKit.StyledTextAction,在actionPerformed方法中加入如下代码:

JEditorPane editor = getEditor(e);

try {
String selectedText = editor.getSelectedText();
HTMLDocument document = (HTMLDocument) this.getStyledDocument(editor);
document.remove(editor.getSelectionStart(), selectedText.length());
HTMLEditorKit kit = (HTMLEditorKit) this.getStyledEditorKit(editor);

kit.insertHTML(document, editor.getSelectionStart(),
“<span style=”background-color: #000000“>” + selectedText + “</span>”, 0,
0, HTML.Tag.SPAN);

} catch (Exception ex) {
ex.printStackTrace();
}

  代码中红色部分标记出来的是16进制数值。在HTML里,颜色有两种表示方式。一种是用颜色名称表示,比如blue表示蓝色。另外一种是用16进制的数值表示RGB的颜色值。RGB是 Red,Green,Blue意思,RGB每个原色的最小值是0,最大值是255,如果换算成16进制表示,就是(#00),(#FF)。比如白色的 RGB(255,255,255),就用#FFFFFF表示;还有黑色的RGB(0,0,0),就用#000000表示。

  若不想程序只有一种背景色的话,可以利用JColorChooser来弹出颜色框,然后将返回的Color转换为16进制数值即可。转换代码如下:

public static String toHexEncoding(Color color) {
String R, G, B;
StringBuffer sb = new StringBuffer();

R = Integer.toHexString(color.getRed());
G = Integer.toHexString(color.getGreen());
B = Integer.toHexString(color.getBlue());

R = R.length() == 1 ? “0″ + R : R;
G = G.length() == 1 ? “0″ + G : G;
B = B.length() == 1 ? “0″ + B : B;

sb.append(“#”);
sb.append(R);
sb.append(G);
sb.append(B);

return sb.toString();
}


五冠 Nokia/诺基亚 5230 5230XM 送证书V20版 内有港行 销数千台
1000.0元
批发 雷朋3025镜面反光太阳镜 太阳眼镜 19.9/副 顶级质量
19.9元
促销笔记本电脑 13.3英寸超薄N450无线网卡视频
1999.0元

留下您的脚印


«
»