Swing/HeaderFont のバックアップの現在との差分(No.11)
TITLE:JTableHeaderのフォントを変更
Posted by terai 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
#screenshot
サンプルコード
#spanend
#spandel
JTableHeader h = table.getTableHeader();
#spanend
#spandel
Font font = new Font("Sans-serif", Font.PLAIN, 32);
#spanend
#spandel
TableCellRenderer hr = h.getDefaultRenderer();
#spanend
#spandel
TableColumn col = table.getColumnModel().getColumn(0);
#spanend
#spandel
col.setHeaderRenderer(new HeaderRenderer(hr, font));
#spanend
#spandel
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
class HeaderRenderer implements TableCellRenderer {
private final TableCellRenderer tcr;
private final Font font;
public HeaderRenderer(TableCellRenderer tcr, Font font) {
this.tcr = tcr;
this.font = font;
}
public Component getTableCellRendererComponent(JTable tbl, Object val,
boolean isS, boolean hasF, int row, int col) {
JLabel l = (JLabel)tcr.getTableCellRendererComponent(
tbl, val, isS, hasF, row, col);
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;
}
}
解説
ヘッダを修飾する場合も、セルの場合と同様に、TableCellRendererを実装したセルレンダラーを使います。解説
上記のサンプルでは、0
番目のカラムヘッダだけフォントを変更しています。JTableHeader
のセルを修飾する場合もJTable
中のセルの場合と同様にTableCellRenderer
を実装したセルレンダラーが使用可能です。
サンプルのセルレンダラーは、TableCellRenderer#getTableCellRendererComponentメソッドの中で、委譲しているヘッダのデフォルトのレンダラーから描画に使用するコンポーネント(JLabel)を取得し、そのラベルのフォントだけJLabel#setFontメソッドで置き換えています。
サンプルのセルレンダラーは、TableCellRenderer#getTableCellRendererComponent(...)
メソッドの中で委譲しているヘッダのデフォルトのレンダラーから描画に使用するコンポーネント(JLabel
)を取得し、そのラベルのフォントだけJLabel#setFont(...)
メソッドで置き換えています。
同様の方法で、文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更することができます。
すべてのヘッダを同じフォントや文字色で変更する場合は、以下のようにUIManagerを使用する方法もあります。
- 同様の方法で文字色、背景色、ボーダー、文字の中央揃え、右揃えなども変更可能
- 字揃えを変更する場合の注意点: JTableHeaderの字揃えを変更
- コメントでいつも見てますさんが指摘しているように
JTableHeader#setFont()
メソッドを使用すると全カラムヘッダのフォントを指定可能#spandel UIManager.put("TableHeader.font", new FontUIResource(font)); #spanend #spanadd table.getTableHeader().setFont(font); #spanend
- -
- テスト中
- メモ:Default Table Header Cell Renderer Java Tips Weblog
- ヘッダの字揃えを以下のように行った場合、フォントの指定は第二列のみ、字揃えは全体に作用する?
- Microsoft Windows XP [Version 5.1.2600]
- Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
- すべての
JTable
のヘッダを同じフォントや文字色で変更する場合は以下のようにUIManager
を使用する方法もある#spandel col = table.getColumnModel().getColumn(2); #spanend #spandel TableCellRenderer hr = table.getTableHeader().getDefaultRenderer(); #spanend #spandel col.setHeaderRenderer(new HeaderRenderer(hr)); #spanend #spanadd UIManager.put("TableHeader.font", new FontUIResource(font)); #spanend
#spanend #spandel static class HeaderRenderer implements TableCellRenderer { #spanend private final TableCellRenderer renderer; private final Font font = new Font("Sans-serif", Font.BOLD, 14); public HeaderRenderer(TableCellRenderer renderer) { this.renderer = renderer; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel l = (JLabel)renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); l.setHorizontalAlignment(JLabel.CENTER); l.setFont(font); return l; } #spandel } #spanend #spandel