Swing/CharacterAttributes のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CharacterAttributes へ行く。
- 1 (2020-03-09 (月) 18:27:33)
- 2 (2021-08-19 (木) 00:56:06)
- category: swing folder: CharacterAttributes title: JTextPane内の文字に適用されているスタイル情報を取得する tags: [JTextPane, AttributeSet, StyledDocument, StyleConstants] author: aterai pubdate: 2020-03-09T18:26:14+09:00 description: JTextPaneのCaret位置に存在する文字に適用されているスタイルの属性セットを取得します。 image: https://drive.google.com/uc?id=1LVro6tfG-PGrN80BWtx-Fmwupx2D3t0w
概要
JTextPaneのCaret位置に存在する文字に適用されているスタイルの属性セットを取得します。
Screenshot
Advertisement
サンプルコード
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 in GitHub: Java, Kotlin解説
JTextPane
にCaretListener
を設定してカーソル位置のCharacterElement
を取得Element#getAttributes()
メソッドを使用してこの文字が保持する属性セットを取得- 取得した属性セットに以下の属性キーが存在するかなどを
StyleConstants
のスタティックメソッドを使用してテストisBold
、isUnderline
、Foreground
、FontFamily
、FontSize
FontFamily
ではなくFont
自体を取得する場合はStyleContext#getFont(AttributeSet)を使用する