TITLE:JTableHeaderのフォントを変更

JTableHeaderのフォントを変更

編集者:Terai Atsuhiro~

作成日:2004-08-23
更新日:2022-08-07 (日) 00:18:06
  • 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のヘッダが使用するフォントを変更します。

概要

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

サンプルコード

#spanend
#spanadd
class HeaderRenderer implements TableCellRenderer {
#spanend
  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;
  }
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin

#screenshot

解説

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

サンプルコード

サンプルのセルレンダラーは、TableCellRenderer#getTableCellRendererComponent(...)メソッドの中で委譲しているヘッダのデフォルトのレンダラーから描画に使用するコンポーネント(JLabel)を取得し、そのラベルのフォントだけJLabel#setFont(...)メソッドで置き換えています。
  • 同様の方法で文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更可能
  • コメントでいつも見てますさんが指摘しているようにJTableHeader#setFont()メソッドを使用すると全カラムヘッダのフォントを指定可能
     JTableHeader hd = jtable.getTableHeader();
     hd.setReorderingAllowed(false);
     hd.setDefaultRenderer(new HeaderRenderer(hd.getDefaultRenderer()));
    #spandel
    
    #spanend
     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;
       }
     }
    #spanadd
    table.getTableHeader().setFont(font);
    #spanend
    
  • &jnlp;
  • &jar;
  • &zip;

解説

ヘッダを修飾する場合も、セルの場合と同様に、TableCellRendererを実装したクラスを使用します。サンプルではフォントだけ変更していますが、getTableCellRendererComponentメソッドを実装することで、文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更することができます。 また、TableCellRendererではなく、以下のようにUIManagerを使用してフォントを変更する方法もあります。
  • すべてのJTableのヘッダを同じフォントや文字色で変更する場合は以下のようにUIManagerを使用する方法もある
     UIManager.put("TableHeader.font", new FontUIResource(font));
    #spanadd
    UIManager.put("TableHeader.font", new FontUIResource(font));
    #spanend
    

参考リンク

参考リンク

コメント

コメント