我有 JTextPane 和一个复选框,表示可以说粗体。因此,如果选中复选框,我希望我在 JTextPane 中输入的任何内容都是粗体。我不想更改 JTextPane 的整个字体,我只想将下一个字符设置为粗体。我做了这个,它有效:
///framework is JTextPane
framework.addKeyListener(new KeyListener() {
StyledDocument doc = framework.getStyledDocument();
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
if(boldcheck.isSelected()){
StyleContext sc = new StyleContext();
Style ns = sc.addStyle("a", null);
ns.addAttribute(StyleConstants.Bold, new Boolean(true));
try {
String s = Character.toString(e.getKeyChar());
doc.insertString(doc.getLength(),s, ns);
framework.remove(doc.getLength());
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
///// rest of keylistener
但我不认为这样做是个好主意
doc.insertString(doc.getLength(),s, ns);
framework.remove(doc.getLength());
我试过了,doc.setCharacterAttributes(doc.getLength(),1, ns, true)
但它不起作用,如果我这样做doc.setCharacterAttributes(doc.getLength()-1,1, ns, true)
会keyReleased
很糟糕,我的意思是首先会看到我输入的内容,然后我会看到它在变化,如果我输入速度很快,它不会改变某些字母的属性。那么有人知道更好的方法吗?