Swing/HeaderFont のバックアップの現在との差分(No.15)
TITLE:JTableHeaderのフォントを変更
Posted by aterai at 2004-08-23
JTableHeaderのフォントを変更
TableCellRendererを使って、JTableのヘッダが使用するフォントを変更します。- 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:
概要
TableCellRenderer
を使って、JTable
のヘッダが使用するフォントを変更します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
class HeaderRenderer implements TableCellRenderer {
private final Font font = new Font("Sans-serif", Font.PLAIN, 32);
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);
JLabel l = (JLabel) r.getTableCellRendererComponent(t, val, isS, hasF, row, col);
l.setFont(font);
return l;
}
}
解説
ヘッダを修飾する場合も、セルの場合と同様に、TableCellRendererを実装したセルレンダラーを使います。解説
上記のサンプルでは、0
番目のカラムヘッダだけフォントを変更しています。JTableHeader
のセルを修飾する場合もJTable
中のセルの場合と同様にTableCellRenderer
を実装したセルレンダラーが使用可能です。
サンプルのセルレンダラーは、TableCellRenderer#getTableCellRendererComponentメソッドの中で、委譲しているヘッダのデフォルトのレンダラーから描画に使用するコンポーネント(JLabel)を取得し、そのラベルのフォントだけJLabel#setFontメソッドで置き換えています。
サンプルのセルレンダラーは、TableCellRenderer#getTableCellRendererComponent(...)
メソッドの中で委譲しているヘッダのデフォルトのレンダラーから描画に使用するコンポーネント(JLabel
)を取得し、そのラベルのフォントだけJLabel#setFont(...)
メソッドで置き換えています。
同様の方法で、文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更することができます。
すべてのヘッダを同じフォントや文字色で変更する場合は、以下のようにUIManagerを使用する方法もあります。
- 同様の方法で文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更可能
- 字揃えを変更する場合の注意点: JTableHeaderの字揃えを変更
- コメントでいつも見てますさんが指摘しているように
JTableHeader#setFont()
メソッドを使用すると全カラムヘッダのフォントを指定可能#spanadd table.getTableHeader().setFont(font); #spanend #spanadd
JTable
のヘッダを同じフォントや文字色で変更する場合は以下のようにUIManager
を使用する方法もある
#spanend
UIManager.put("TableHeader.font", new FontUIResource(font));