It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。
7年前关闭。
我有一个JTextPane,我想在其中添加行,并根据它们的内容使它们具有不同的格式。
目前我有这个
我取出catch语句来减小代码大小。
但是,这会用
7年前关闭。
我有一个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
的东西,它们彼此覆盖了吗?如果是这样,我该如何解决? 最佳答案
还可以看到here,TextComponentDemo
显示如何应用许多StyleConstants
,包括字体大小,样式,对齐方式和颜色。样式可以直接应用于Document
(如initAttributes()
所示),也可以通过StyledEditorKit
的动作(如here所示)应用。
附录:以下示例使用SimpleAttributeSet
创建三种相关样式。请注意,highAlert
会更改颜色,但保留从boldBlue
继承的粗体属性。
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);
}
}
});
}
}