TITLE:JTableのヘッダを透明化
#navi(../)
RIGHT:Posted by [[aterai]] at 2011-04-04
*JTableのヘッダを透明化 [#wa1142d7]
JTableのヘッダ背景、セル間の垂直罫線を非表示にします。

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

//#screenshot
#ref(https://lh6.googleusercontent.com/_9Z4BYR88imo/TZl3Ci_GNnI/AAAAAAAAA40/wSbo6ySTlz0/s800/TransparentTableHeader.png)

**サンプルコード [#g91fa02e]
#code{{
class TransparentHeader extends JLabel implements TableCellRenderer {
  private final Border b = BorderFactory.createCompoundBorder(
      BorderFactory.createMatteBorder(0,0,1,0,Color.BLACK),
      BorderFactory.createEmptyBorder(2,2,1,2));
  private final Color alphaZero = new Color(0, true);
  @Override public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    this.setText(value!=null?value.toString():"");
    this.setHorizontalAlignment(JLabel.CENTER);
    this.setOpaque(false);
    this.setBackground(alphaZero);
    this.setForeground(Color.BLACK);
    this.setBorder(b);
    return this;
  }
}
}}

**解説 [#j215b195]
- JTableHeader
-- JTableHeaderとヘッダレンダラーの両方を、setOpaque(false), 背景色: Color(0, true) と設定
- JTable, JScrollPane(Viewport, ColumnHeader)も setOpaque(false), 背景色: Color(0, true)と設定
-- 背景パターンは、JScrollPane#paintComponent(...)をオーバーライドして描画
--- [[JTableを半透明にする>Swing/TransparentTable]]は、JViewport#paintComponent(...)をオーバーライド
- VerticalLine
-- セル間の垂直線を非表示: table.setShowVerticalLines(false);
-- セル間の幅を0にして、選択時に罫線のあとが表示されないように設定: table.setIntercellSpacing(new Dimension(0,1));
- Boolean.classのDefaultRenderer
-- 透明化したBooleanCellRendererやBooleanCellEditorを設定

**参考リンク [#ef89274d]
- [[JTableを半透明にする>Swing/TransparentTable]]
- [[JTableHeaderを非表示にする>Swing/RemoveTableHeader]]

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