gpt4 book ai didi

java - 如何获取 jTextPane 中特定字符的字体(isBold,isUnderline)?

转载 作者:行者123 更新时间:2023-12-01 17:41:38 24 4
gpt4 key购买 nike

我用过

doc.setCharacterAttributes(textPane.getSelectionStart(),
textPane.getSelectionEnd()-textPane.getSelectionStart(),red, false);

更改 JTextpane 中文本的显示样式。我尝试使用函数 getCharacterAttributes()查看特定文本的样式,但是 DefaultStyledModel 没有这样的方法。我能用这个做什么?

额外的恩惠:

我知道在vb.net中,richtextbox有一个名为“rtftext”或其他名称的属性,其中包含richtextbox中的文本和字体信息。 Java JTextPane 中类似的方法/属性是什么?我尝试了 getDocument()setDocument 但什么也没发生。

最佳答案

GET the attribute

您也许可以使用StyledDocument#getCharacterElement(int)Element#getAttributes()

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

public class CharacterAttributesTest {
public Component makeUI() {
StyleContext style = new StyleContext();
StyledDocument doc = new DefaultStyledDocument(style);
try {
doc.insertString(0, "abcdefghijklmnopqrstuvwxyz", null);
} catch (BadLocationException e) {
e.printStackTrace();
}
MutableAttributeSet attr1 = new SimpleAttributeSet();
attr1.addAttribute(StyleConstants.Bold, Boolean.TRUE);
attr1.addAttribute(StyleConstants.Foreground, Color.RED);
doc.setCharacterAttributes(5, 8, attr1, false);

MutableAttributeSet attr2 = new SimpleAttributeSet();
attr2.addAttribute(StyleConstants.Underline, Boolean.TRUE);
doc.setCharacterAttributes(3, 20, attr2, false);

JTextPane textPane = new JTextPane(doc);
textPane.addCaretListener(e -> {
if (e.getDot() == e.getMark()) {
AttributeSet a = doc.getCharacterElement(e.getDot()).getAttributes();
System.out.println("isBold: " + StyleConstants.isBold(a));
System.out.println("isUnderline: " + StyleConstants.isUnderline(a));
System.out.println("Font: " + style.getFont(a));
System.out.println("Foreground: " + StyleConstants.getForeground(a));
}
});

JPanel p = new JPanel(new BorderLayout());
p.add(new JScrollPane(textPane));
return p;
}

public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new CharacterAttributesTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}

关于java - 如何获取 jTextPane 中特定字符的字体(isBold,isUnderline)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60410481/

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