TITLE:JTableHeaderのフォントを変更

Posted by at 2004-08-23

JTableHeaderのフォントを変更

`TableCellRendererを使って、JTable`のヘッダが使用するフォントを変更します。

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

サンプルコード

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;
  }
}
View in GitHub: Java, Kotlin

解説

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

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

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


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

table.getTableHeader().setFont(font);

すべての`JTableのヘッダを同じフォントや文字色で変更する場合は、以下のようにUIManager`を使用する方法もあります。

UIManager.put("TableHeader.font", new FontUIResource(font));

参考リンク

コメント

  • これでいいのでは? `JTableHeader header = TABLE.getTableHeader(); header.setFont(FONT);` -- いつも見てます
    • ご指摘ありがとうございます。解説などをすこし追加、修正しました。 -- aterai