JTableHeaderの高さを変更
Total: 12964, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
内部の文字サイズなどはそのままで、JTableHeaderの高さだけを変更する方法をテストします。
Screenshot

Advertisement
Source Code Examples
JScrollPane scroll = new JScrollPane(table);
scroll.setColumnHeader(new JViewport() {
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
d.height = 32;
return d;
}
});
View in GitHub: Java, KotlinDescription
- 上:
Bad: JTableHeader#setPreferredSize(...)JTableHeaderにnull(デフォルト)以外のサイズをsetPreferredSize(...)で設定- 列幅の調整を自動的に行わない
JTable.AUTO_RESIZE_OFFモードの場合、設定されたこのサイズが列の追加や列幅の変更で更新されないためヘッダの描画が不正になる JTable.AUTO_RESIZE_OFF以外の場合はsetPreferredSize(...)で設定された幅は無視されてJTableの幅が使用される
- 下:
Override getPreferredSize()JViewport#getPreferredSize()もしくはJTableHeader#getPreferredSize()をオーバーライドしてJTableHeaderの高さを変更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()で使用されているため
Reference
- JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。 - kensir0uのしくみ
- このバグ?の状態を適切に示す良いサンプルコードがある
- JDK-4473075 JTable header rendering problem (after setting preferred size) - Java Bug System
JDK 9で修正されている