Swing/TableHeaderHeight の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/TableHeaderHeight へ行く。
- Swing/TableHeaderHeight の差分を削除
--- category: swing folder: TableHeaderHeight title: JTableHeaderの高さを変更 tags: [JTableHeader, JTable, JScrollPane, JViewport] author: aterai pubdate: 2012-05-28T14:51:47+09:00 description: 内部の文字サイズなどはそのままで、JTableHeaderの高さだけを変更する方法をテストします。 image: https://lh4.googleusercontent.com/-l20IOO5wKSo/T8MIf7FVUwI/AAAAAAAABNM/9BNN63T96Fo/s800/TableHeaderHeight.png hreflang: href: https://java-swing-tips.blogspot.com/2012/06/height-of-jtableheader.html lang: en --- * 概要 [#summary] 内部の文字サイズなどはそのままで、`JTableHeader`の高さだけを変更する方法をテストします。 #download(https://lh4.googleusercontent.com/-l20IOO5wKSo/T8MIf7FVUwI/AAAAAAAABNM/9BNN63T96Fo/s800/TableHeaderHeight.png) * サンプルコード [#sourcecode] #code(link){{ JScrollPane scroll = new JScrollPane(table); scroll.setColumnHeader(new JViewport() { @Override public Dimension getPreferredSize() { Dimension d = super.getPreferredSize(); d.height = 32; return d; } }); }} * 解説 [#explanation] - 上: `Bad: JTableHeader#setPreferredSize(...)` -- `JTableHeader`に`null`(デフォルト)以外のサイズを`setPreferredSize(...)`で設定 -- 列幅の調整を自動的に行わない`JTable.AUTO_RESIZE_OFF`モードの場合、設定されたこのサイズが列の追加や列幅の変更で更新されないためヘッダの描画が不正になる --- [https://kensir0u.hatenadiary.org/entry/20090416/1239898154 JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。 - kensir0uのしくみ] -- `JTable.AUTO_RESIZE_OFF`以外の場合は`setPreferredSize(...)`で設定された幅は無視されて`JTable`の幅が使用される - 下: `Override getPreferredSize()` -- `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()`で使用されているため * 参考リンク [#reference] - [https://kensir0u.hatenadiary.org/entry/20090416/1239898154 JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。 - kensir0uのしくみ] -- このバグ?の状態を適切に示す良いサンプルコードがある - [https://bugs.openjdk.java.net/browse/JDK-4473075 JDK-4473075 JTable header rendering problem (after setting preferred size) - Java Bug System] - [https://bugs.openjdk.org/browse/JDK-4473075 JDK-4473075 JTable header rendering problem (after setting preferred size) - Java Bug System] -- `JDK 9`で修正されている * コメント [#comment] #comment #comment