JTextPane格式化

我有一个JTextPane,我想添加行,根据他们的内容,他们有不同的格式。

目前我有这个

StyleContext context = new StyleContext(); StyledDocument document = new DefaultStyledDocument(context); Style styleBold = context.getStyle(StyleContext.DEFAULT_STYLE); StyleConstants.setBold(styleBold, true); StyleConstants.setFontSize(styleBold, 18); Style styleNorm = context.getStyle(StyleContext.DEFAULT_STYLE); StyleConstants.setFontSize(styleNorm, 15); for (int i = 0; i < temp.size(); i++) { String tmp = temp.get(i); if (tmp.substring(0, 2).equals(COMMENT_PREFIX)) { String addThis = " - " + tmp.substring(2); try { document.insertString(document.getLength(), addThis, styleNorm); } //CATCH } else if (tmp.substring(0, 2).equals(VERSION_PREFIX)) { Date d = new Date(System.currentTimeMillis()); String addThis = "Version: " + tmp.substring(2) + " - " + d.toString(); try { document.insertString(document.getLength(), addThis, styleBold); } //CATCH } try { document.insertString(document.getLength(), "\n", styleNorm); } //CATCH } 

我拿出了catch语句来减少代码大小。

但是,这会使用styleNorm格式化我的整个文本。 这是因为它是最后一个名为Style并且它们会相互覆盖吗? 如果是这样,我该如何解决这个问题?

此处还可以看到, TextComponentDemo显示了如何应用多个StyleConstants ,包括字体大小,样式,对齐方式和颜色。 样式可以直接应用于Document ,如initAttributes()所示,也可以通过StyledEditorKit的操作应用, StyledEditorKit所示。

附录:下面的示例使用SimpleAttributeSet创建三个相关样式。 请注意, highAlert会更改颜色,但会保留从boldBlueinheritance的粗体属性。

图片

 import java.awt.Color; import java.awt.EventQueue; import java.util.Date; import javax.swing.JFrame; import javax.swing.JTextPane; import javax.swing.text.BadLocationException; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; /** * @see https://stackoverflow.com/a/15600689/230513 */ public class Test { private void display() throws BadLocationException { JFrame f = new JFrame("Test"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); String s = new Date().toString(); JTextPane jtp = new JTextPane(); StyledDocument doc = (StyledDocument) jtp.getDocument(); SimpleAttributeSet normal = new SimpleAttributeSet(); StyleConstants.setFontFamily(normal, "SansSerif"); StyleConstants.setFontSize(normal, 16); SimpleAttributeSet boldBlue = new SimpleAttributeSet(normal); StyleConstants.setBold(boldBlue, true); StyleConstants.setForeground(boldBlue, Color.blue); SimpleAttributeSet highAlert = new SimpleAttributeSet(boldBlue); StyleConstants.setFontSize(highAlert, 18); StyleConstants.setItalic(highAlert, true); StyleConstants.setForeground(highAlert, Color.red); doc.insertString(doc.getLength(), s + "\n", normal); doc.insertString(doc.getLength(), s + "\n", boldBlue); doc.insertString(doc.getLength(), s + "\n", highAlert); f.add(jtp); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { new Test().display(); } catch (BadLocationException ex) { ex.printStackTrace(System.err); } } }); } }