StyledDocument的setCharacterAttributes() - 摆脱不必要的行为

时间:2013-10-06 12:39:05

标签: java swing jtextpane

JTextPane pane = new JTextPane();
pane.setText("some text");
add(pane);

pane.addStyle("red", null);
Style red = pane.getStyle("red");
StyleConstants.setForeground(red, Color.RED);
pane.getStyledDocument().setCharacterAttributes(3, 1, red, true);

此窗格的内容看起来不错:除了'e'字符为红色外,所有字符都是普通字符。但是在'e'之后输入一些字符之后它也变红了。我如何摆脱这种行为?我只想设置给定字符的属性,我不希望它对其他人有任何影响。

1 个答案:

答案 0 :(得分:1)

修改JTextPane的输入属性应该这样做:

pane.addCaretListener(new CaretListener() {
    public void caretUpdate(CaretEvent event) {
        final JTextPane textPane = (JTextPane) event.getSource();
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                MutableAttributeSet inputAttr =
                    textPane.getInputAttributes();
                inputAttr.removeAttribute(StyleConstants.Foreground);
            }
        });
    }
});