Swing/HeaderFont のバックアップの現在との差分(No.5)
2022-08-07 (日) 00:18:06
概要
TableCellRenderer
を使って、JTable
のヘッダが使用するフォントを変更します。
Screenshot
Advertisement
サンプルコード
#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, KotlinJTableHeader 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; } }
解説
上記のサンプルでは、0
番目のカラムヘッダだけフォントを変更しています。JTableHeader
のセルを修飾する場合もJTable
中のセルの場合と同様にTableCellRenderer
を実装したセルレンダラーが使用可能です。
-
サンプルのセルレンダラーは、
TableCellRenderer#getTableCellRendererComponent(...)
メソッドの中で委譲しているヘッダのデフォルトのレンダラーから描画に使用するコンポーネント(JLabel
)を取得し、そのラベルのフォントだけJLabel#setFont(...)
メソッドで置き換えています。
- 同様の方法で文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更可能
- 字揃えを変更する場合の注意点: JTableHeaderの字揃えを変更
- コメントでいつも見てますさんが指摘しているように
JTableHeader#setFont()
メソッドを使用すると全カラムヘッダのフォントを指定可能#spanend #spanadd table.getTableHeader().setFont(font); #spanend #spanadd
- すべての
JTable
のヘッダを同じフォントや文字色で変更する場合は以下のようにUIManager
を使用する方法もある#spanend #spanadd UIManager.put("TableHeader.font", new FontUIResource(font)); #spanend #spanadd
UIManager.put("TableHeader.font", new FontUIResource(font));