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

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

#screenshot

**サンプルコード [#yf5b0d29]
#code{{
JTableHeader h = table.getTableHeader();
Font font = new Font("Sans-serif", Font.PLAIN, 32);
TableCellRenderer hr = h.getDefaultRenderer();
TableColumn col = table.getColumnModel().getColumn(0);
col.setHeaderRenderer(new HeaderRenderer(hr, font));

class HeaderRenderer implements TableCellRenderer {
  private final TableCellRenderer tcr;
  private final Font font;
  public HeaderRenderer(TableCellRenderer tcr, Font font) {
    this.tcr  = tcr;
    this.font = font;
  }
  public Component getTableCellRendererComponent(JTable tbl, Object val,
                          boolean isS, boolean hasF, int row, int col) {
    JLabel l = (JLabel)tcr.getTableCellRendererComponent(
                                        tbl, val, isS, hasF, row, col);
    l.setFont(font);
    return l;
  }
}
}}

**解説 [#t308c293]
ヘッダを修飾する場合も、セルの場合と同様に、TableCellRendererを実装したセルレンダラーを使います。

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

同様の方法で、文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更することができます。

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

**参考リンク [#rc6f4c8b]
-[[使用するフォントの統一>Swing/FontChange]]

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