TITLE:JEditorPaneやJTextPaneに行間を設定する

Posted by aterai at 2009-11-02

JEditorPaneやJTextPaneに行間を設定する

JEditorPaneやJTextPaneに行間を設定します。

  • &jnlp;
  • &jar;
  • &zip;
LineSpacing.png

サンプルコード

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);
      }
    };
  }
}

解説

  • 上: StyleConstants.setLineSpacingで、行間を指定したAttributeSetを作成し、JTextPane#setParagraphAttributesで設定しています。
    • フォントサイズ相対の行間になる
      SimpleAttributeSet a = new SimpleAttributeSet();
      StyleConstants.setLineSpacing(a, .5f);
      //StyleConstants.setSpaceAbove(a, 5.0f);
      //StyleConstants.setSpaceBelow(a, 5.0f);
      //StyleConstants.setLeftIndent(a, 5.0f);
      //StyleConstants.setRightIndent(a, 5.0f);
      editor1.setParagraphAttributes(a, true);
      setDummyText(editor1);
      
  • 下: ParagraphView#getBottomInsetをオーバーライドして、固定の行間をピクセルで指定しています。
    • フォントサイズに関係なく、アキ5px

スタイルシートでline-heightを指定しても反映されない?

StyleSheet styleSheet = new StyleSheet();
styleSheet.addRule("body {font-size: 24pt; line-height: 2.0}"); //XXX
HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
htmlEditorKit.setStyleSheet(styleSheet);
editor1.setEditorKit(htmlEditorKit);
editor1.setText("<html><body>12<br />a<br />n<font size='32'>123<br />sd</font></body></html>");

コメント