Swing/LineSpacing の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/LineSpacing へ行く。
- Swing/LineSpacing の差分を削除
--- category: swing folder: LineSpacing title: JEditorPaneやJTextPaneに行間を設定する tags: [JEditorPane, JTextPane, StyledEditorKit] author: aterai pubdate: 2009-11-02T12:51:40+09:00 description: JEditorPaneやJTextPaneに行間を設定します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTPYZn_u9I/AAAAAAAAAd4/5-1ThpWwM5U/s800/LineSpacing.png --- * 概要 [#summary] `JEditorPane`や`JTextPane`に行間を設定します。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTPYZn_u9I/AAAAAAAAAd4/5-1ThpWwM5U/s800/LineSpacing.png) * サンプルコード [#sourcecode] #code(link){{ class BottomInsetEditorKit extends StyledEditorKit { @Override public ViewFactory getViewFactory() { return new ViewFactory() { @Override public View create(Element elem) { String kind = elem.getName(); if (kind != null) { if (kind.equals(AbstractDocument.ContentElementName)) { return new LabelView(elem); } else if (kind.equals(AbstractDocument.ParagraphElementName)) { return new javax.swing.text.ParagraphView(elem) { @Override protected short getBottomInset() { return 5; } }; } else if (kind.equals(AbstractDocument.SectionElementName)) { return new BoxView(elem, View.Y_AXIS); } else if (kind.equals(StyleConstants.ComponentElementName)) { return new ComponentView(elem); } else if (kind.equals(StyleConstants.IconElementName)) { return new IconView(elem); } } return new LabelView(elem); } }; } } }} * 解説 [#explanation] - 上: `StyleConstants.setLineSpacing`で行間を指定した`AttributeSet`を作成し、`JTextPane#setParagraphAttributes`で設定 -- フォントサイズ相対の行間になる #code{{ SimpleAttributeSet a = new SimpleAttributeSet(); StyleConstants.setLineSpacing(a, .5f); // StyleConstants.setSpaceAbove(a, 5f); // StyleConstants.setSpaceBelow(a, 5f); // StyleConstants.setLeftIndent(a, 5f); // StyleConstants.setRightIndent(a, 5f); editor1.setParagraphAttributes(a, true); setDummyText(editor1); setSampleText(editor1); }} - 下: `ParagraphView#getBottomInset`をオーバーライドして固定の行間をピクセルで指定 -- フォントサイズに関係なくアキ`5px` ---- - スタイルシートで`line-height`を指定しても反映されない -- `line-height`はモデル化されているが、現在は描画されない -- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/html/CSS.html 対応しているCSSプロパティ一覧 - CSS (Java Platform SE 8)] - ブロックレベルで`1`行だけ固定の行間を指定したい場合は`margin-bottom`が使用可能 #code{{ StyleSheet styleSheet = new StyleSheet(); styleSheet.addRule("body {font-size: 24pt; line-height: 2.0}"); styleSheet.addRule(".test {margin-bottom: 2pt; padding-bottom: 1px; }"); // XXX: styleSheet.addRule("span {color: white; display:inline-block; margin-bottom: 10pt;}"); HTMLEditorKit htmlEditorKit = new HTMLEditorKit(); htmlEditorKit.setStyleSheet(styleSheet); editor1.setEditorKit(htmlEditorKit); editor1.setText("<html><body><div class='test'>12<br />a<br />n<font size='32'>123<br />sd</font></div></body></html>"); }} * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTextPane.html#setParagraphAttributes-javax.swing.text.AttributeSet-boolean- JTextPane#setParagraphAttributes(...) (Java Platform SE 8)] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/CompositeView.html#getBottomInset-- CompositeView#getBottomInset() (Java Platform SE 8)] * コメント [#comment] #comment #comment