• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableHeaderのフォントを変更
#navi(../)
*JTableHeaderのフォントを変更 [#e6b03eac]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2004-08-23~
更新日:&lastmod;
---
category: swing
folder: HeaderFont
title: JTableHeaderのフォントを変更
tags: [JTable, JTableHeader, TableCellRenderer, UIManager]
author: aterai
pubdate: 2004-08-23T02:54:09+09:00
description: TableCellRendererを使って、JTableのヘッダが使用するフォントを変更します。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTNshbAJvI/AAAAAAAAAbM/xYo1iOQ9fxU/s800/HeaderFont.png
---
* 概要 [#summary]
`TableCellRenderer`を使って、`JTable`のヘッダが使用するフォントを変更します。

#contents
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTNshbAJvI/AAAAAAAAAbM/xYo1iOQ9fxU/s800/HeaderFont.png)

**概要 [#gc218846]
TableCellRendererを使って、JTableのヘッダが使用するフォントを変更します。
* サンプルコード [#sourcecode]
#code(link){{
class HeaderRenderer implements TableCellRenderer {
  private final Font font = new Font(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;
  }
}
}}

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

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

- 同様の方法で文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更可能
-- 字揃えを変更する場合の注意点: [[JTableHeaderの字揃えを変更>Swing/HorizontalAlignmentHeaderRenderer]]
- コメントで&user(いつも見てます);さんが指摘しているように`JTableHeader#setFont()`メソッドを使用すると全カラムヘッダのフォントを指定可能
#code{{
 JTableHeader hd = jtable.getTableHeader();
 hd.setReorderingAllowed(false);
 hd.setDefaultRenderer(new HeaderRenderer(hd.getDefaultRenderer()));

 class HeaderRenderer implements TableCellRenderer {
   private final TableCellRenderer tcr;
   private final Font font = new Font("Sans-serif", Font.PLAIN, 32);
   private final Font orgfont;
   public HeaderRenderer(TableCellRenderer tcr) {
     this.tcr = tcr;
     this.orgfont = UIManager.getFont("TableHeader.font");
   }
   public Component getTableCellRendererComponent(JTable tbl, Object val,
                           boolean isS, boolean hasF, int row, int col) {
     JLabel lbl = (JLabel)tcr.getTableCellRendererComponent(
                                           tbl, val, isS, hasF, row, col);
     if(col==0) lbl.setFont(font);
     else lbl.setFont(orgfont);
     return lbl;
   }
 }
table.getTableHeader().setFont(font);
}}
-&jnlp;
-&jar;
-&zip;

**解説 [#t308c293]
ヘッダを修飾する場合も、セルの場合と同様に、TableCellRendererを実装したクラスを使用します。サンプルではフォントだけ変更していますが、getTableCellRendererComponentメソッドを実装することで、文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更することができます。

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

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

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

#comment