概要

JTextPaneCaret位置に存在する文字に適用されているスタイルの属性セットを取得します。

スクリーンショット

Swing/CharacterAttributes.png

サンプルコード

StyleContext style = new StyleContext();
StyledDocument doc = new DefaultStyledDocument(style);
// ...
MutableAttributeSet attr1 = new SimpleAttributeSet();
attr1.addAttribute(StyleConstants.Bold, Boolean.TRUE);
attr1.addAttribute(StyleConstants.Foreground, Color.RED);
doc.setCharacterAttributes(4, 11, attr1, false);

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

JTextPane textPane = new JTextPane(doc);
textPane.addCaretListener(e -> {
  if (e.getDot() == e.getMark()) {
    AttributeSet a = doc.getCharacterElement(e.getDot()).getAttributes();
    append("isBold: " + StyleConstants.isBold(a));
    append("isUnderline: " + StyleConstants.isUnderline(a));
    append("Foreground: " + StyleConstants.getForeground(a));
    append("FontFamily: " + StyleConstants.getFontFamily(a));
    append("FontSize: " + StyleConstants.getFontSize(a));
    append("Font: " + style.getFont(a));
    append("----");
  }
});
view all

解説

  • JTextPaneCaretListenerを設定してカーソル位置のCharacterElementを取得
  • Element#getAttributes()メソッドを使用してこの文字が保持する属性セットを取得
  • 取得した属性セットに以下の属性キーが存在するかなどをStyleConstantsのスタティックメソッドを使用してテスト

参考リンク

コメント