---
category: swing
folder: HonorDisplayProperties
title: JEditorPaneに設定したフォントをHTMLテキストに適用する
tags: [JEditorPane, HTMLEditorKit, Font, StyleSheet, HTML]
author: aterai
pubdate: 2015-08-31T03:59:20+09:00
description: HTMLEditorKitでbodyタグにデフォルトで指定されている文字サイズではなく、JEditorPaneに設定したフォントをHTMLテキストで使用します。
image: https://lh3.googleusercontent.com/-eKfbGIGltkw/VeNSQCA5DkI/AAAAAAAAOAg/PyS8lMWBPu0/s800-Ic42/HonorDisplayProperties.png
---
* 概要 [#summary]
`HTMLEditorKit`で`body`タグにデフォルトで指定されている文字サイズではなく、`JEditorPane`に設定したフォントを`HTML`テキストで使用します。

#download(https://lh3.googleusercontent.com/-eKfbGIGltkw/VeNSQCA5DkI/AAAAAAAAOAg/PyS8lMWBPu0/s800-Ic42/HonorDisplayProperties.png)

* サンプルコード [#sourcecode]
#code(link){{
editor.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
}}

* 解説 [#explanation]
- `HTMLEditorKit`のデフォルトスタイルシートでは`body`タグに`font-size: 14pt`などが設定されている
-- この設定が`HTML`テキストのデフォルト文字サイズになっているため、`JEditorPane`に`JEditorPane#setFont(new Font("Serif", Font.PLAIN, 16))`メソッドでフォントを指定しても反映されない
-- この設定が`HTML`テキストのデフォルト文字サイズになっているため、`JEditorPane`にたとえば`JEditorPane#setFont(new Font("Serif", Font.PLAIN, 16))`とフォントを変更しても反映されない
- `JEditorPane`に設定されたフォントを使用する場合は、`JEditorPane#putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE)`としてコンポーネントのデフォルトのフォントを使用するように設定する必要がある

- `body`タグのスタイルを表示するサンプルコード
-- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/html/StyleSheet.html StyleSheet (Java Platform SE 8)]のサンプル(`ShowStyles`)を参考
#code{{
StringBuilder buf = new StringBuilder(300);
HTMLEditorKit htmlEditorKit = (HTMLEditorKit) editor.getEditorKit();
StyleSheet styles = htmlEditorKit.getStyleSheet();
// System.out.println(styles);
Enumeration rules = styles.getStyleNames();
while (rules.hasMoreElements()) {
  String name = (String) rules.nextElement();
  if ("body".equals(name)) {
    Style rule = styles.getStyle(name);
    Enumeration sets = rule.getAttributeNames();
    while (sets.hasMoreElements()) {
      Object n = sets.nextElement();
      buf.append(String.format("%s: %s<br />", n, rule.getAttribute(n)));
    }
  }
}
editor.setText(buf.toString());
}}

// - `JDK 1.8.0_60`ではスクリーンショットのように自動的に折り返されるが、`JDK 1.9.0-ea-b78`では、水平スクロールバーが表示される?

* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JEditorPane.html#HONOR_DISPLAY_PROPERTIES JEditorPane.HONOR_DISPLAY_PROPERTIES (Java Platform SE 8)]

* コメント [#comment]
#comment
#comment