• 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

概要

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

サンプルコード

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;
  }
}
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));

参考リンク

コメント