TITLE:JTableHeaderのフォントを変更
#navi(../)
RIGHT:Posted by [[aterai]] at 2004-08-23
*JTableHeaderのフォントを変更 [#e6b03eac]
TableCellRendererを使って、JTableのヘッダが使用するフォントを変更します。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTNshbAJvI/AAAAAAAAAbM/xYo1iOQ9fxU/s800/HeaderFont.png)

**サンプルコード [#yf5b0d29]
#code{{
class HeaderRenderer implements TableCellRenderer {
  private final Font font = new Font("Sans-serif", Font.PLAIN, 32);
  @Override public Component getTableCellRendererComponent(JTable t,
      Object val, boolean isS, boolean hasF, int row, int col) {
    TableCellRenderer r = t.getTableHeader().getDefaultRenderer();
    JLabel l = (JLabel)r.getTableCellRendererComponent(t, val, isS, hasF, row, col);
    l.setFont(font);
    return l;
  }
}
}}

**解説 [#t308c293]
上記のサンプルでは、0番目のカラムだけフォントを変更しています。カラムのヘッダを修飾する場合も、セルの場合と同様に、TableCellRendererを実装したセルレンダラーを使用することができます。

サンプルのセルレンダラーは、TableCellRenderer#getTableCellRendererComponentメソッドの中で、委譲しているヘッダのデフォルトのレンダラーから描画に使用するコンポーネント(JLabel)を取得し、そのラベルのフォントだけJLabel#setFontメソッドで置き換えています。

同様の方法で、文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更することができます。
- 字揃えを変更する場合の注意点: [[JTableHeaderの字揃えを変更>Swing/HorizontalAlignmentHeaderRenderer]]

----
コメントで[[いつも見てます]]さんが指摘しているように、以下の様にJTableHeader#setFont()メソッドを使用すると、全カラムのフォントを指定することができます。

#code{{
table.getTableHeader().setFont(font);
}}

----
すべてのJTableのヘッダを同じフォントや文字色で変更する場合は、以下のようにUIManagerを使用する方法もあります。
#code{{
UIManager.put("TableHeader.font", new FontUIResource(font));
}}

**参考リンク [#rc6f4c8b]
-[[使用するフォントの統一>Swing/FontChange]]
-[http://tips4java.wordpress.com/2009/02/27/default-table-header-cell-renderer/ Default Table Header Cell Renderer Java Tips Weblog]
-[[JTableHeaderの字揃え>Swing/HorizontalAlignmentHeaderRenderer]]

**コメント [#b5df1536]
- これでいいのでは?		JTableHeader header = TABLE.getTableHeader(); 		header.setFont(FONT); -- [[いつも見てます]] &new{2011-11-24 (木) 06:02:05};
-- ご指摘ありがとうございます。解説などをすこし追加、修正しました。 -- [[aterai]] &new{2011-11-24 (木) 16:28:46};

#comment