TITLE:JTableHeaderの高さを変更
#navi(../)
RIGHT:Posted by [[aterai]] at 2012-05-28
*JTableHeaderの高さを変更 [#i0975169]
JTableHeaderの高さを変更します。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(https://lh4.googleusercontent.com/-l20IOO5wKSo/T8MIf7FVUwI/AAAAAAAABNM/9BNN63T96Fo/s800/TableHeaderHeight.png)

**サンプルコード [#zb516453]
#code{{
JScrollPane scroll = new JScrollPane(table);
scroll.setColumnHeader(new JViewport() {
  @Override public Dimension getPreferredSize() {
    Dimension d = super.getPreferredSize();
    d.height = 32;
    return d;
  }
});
}}

**解説 [#aacfefbf]
- 上
-- JTableHeaderにデフォルトのnull以外のサイズをsetPreferredSize(...)で設定
-- JTable.AUTO_RESIZE_OFFの場合、設定されたこのサイズが列の追加や列幅の変更で更新されない(仕様?)ため、ヘッダの描画が不正になる
--- [http://d.hatena.ne.jp/kensir0u/20090416/1239898154 JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。 - kensir0uのしくみ]
-- JTable.AUTO_RESIZE_OFF以外の場合は、setPreferredSize(...)で設定された幅は無視されて、JTableの幅が使用される

- 下
-- JViewport#getPreferredSize()もしくは、JTableHeader#getPreferredSize()をオーバーライドして、JTableHeaderの高さを変更
#code{{
table.setTableHeader(new JTableHeader(table.getColumnModel()) {
  @Override public Dimension getPreferredSize() {
    Dimension d = super.getPreferredSize();
    d.height = 32;
    return d;
  }
});
}}
-- viewport.setPreferredSize(...) と設定しても可…?
-- JTableHeader#getHeight()をオーバーライドすると、ヘッダ文字列などの描画だけ(getHeight()はJTableHeader#getHeaderRect()で使用されている)変更される

**参考リンク [#we49e437]
- [http://d.hatena.ne.jp/kensir0u/20090416/1239898154 JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。 - kensir0uのしくみ]
-- このバグ?の状態を適切に示す良いサンプルコードがあります。

**コメント [#ib91d24e]
#comment