JTextPane更改某个起点的字体

时间:2014-01-06 04:27:01

标签: java swing jtextpane caret

如何更改某个起点的字体?

我有一个按钮,在某一点切换字体。

示例:

somtext |

按按钮

sometext boldedtext |

所以我发布了事件密钥,但我可以看到更改的字体已经发布了密钥

这是密钥发布的事件

         private void textoKeyReleased(javax.swing.event.CaretEvent evt)                  {                                  
          int end = texto.getSelectionEnd();
            StyledDocument doc = texto.getStyledDocument();

            Style style = texto.getStyle("negra");

        if (car==1) 
            {

            StyleConstants.setBold(style, true);
            doc.setCharacterAttributes(end-1,end, style, false);
            texto.requestFocus();
            texto.moveCaretPosition(doc.getLength());
            }
        if(car==0)
        {
            StyleConstants.setBold(style, false);
            doc.setCharacterAttributes(end-1 ,end, style, false);
            texto.requestFocus();
            texto.moveCaretPosition(doc.getLength());
        }  
    }

但我明白了

首先

结局 a

更新不是实时的另一种方法:

2 个答案:

答案 0 :(得分:0)

KeyListener接口中的密钥释放事件的问题是仅在用户放开密钥时才调用它。在您的代码中,如果用户按住某个键重复它,则只会根据设置的样式修改最后一个字符。此外,在键入过程中,如果用户在释放第一个键之前按下第二个键,则只会更新最后一个字符。

另一种方法是在KeyListener接口的keyTyped方法中调用代码。

还简化了代码。

private void textoKeyReleased(javax.swing.event.CaretEvent evt) {
    int end = textPane.getSelectionEnd();
    StyledDocument doc = textPane.getStyledDocument();

    Style style = textPane.getStyle("negra");
    StyleConstants.setBold(style, car == 1);
    doc.setCharacterAttributes(end - 1, 1, style, false);
    textPane.requestFocus();
}

@Override
public void keyTyped(KeyEvent e) {
    SwingUtilities.invokeLater(new Runnable() {         
        @Override
        public void run() {
            textoKeyReleased(null);
        }
    });
}

答案 1 :(得分:0)

阅读Text Component Features上的Swing教程中的secton,其中介绍了如何为bold属性创建JMenuItem。同样的方法可以用于JButton,因为粗体Action也可以用在按钮中。