gpt4 book ai didi

java - JTextPane 格式化

转载 作者:行者123 更新时间:2023-12-01 06:54:35 28 4
gpt4 key购买 nike

我有一个 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 继承的 bold 属性。

image

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);
}
}
});
}
}

关于java - JTextPane 格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600100/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com