• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableのヘッダを透明化
#navi(../)
#tags()
#tags(JTable, JTableHeader, Transparent, JScrollPane, JViewport, TableCellRenderer, TableCellEditor)
RIGHT:Posted by &author(aterai); at 2011-04-04
*JTableのヘッダを透明化 [#wa1142d7]
JTableのヘッダ背景、セル間の垂直罫線を非表示にします。
``JTable``のヘッダ背景、セル間の垂直罫線を非表示にします。

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

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

**サンプルコード [#g91fa02e]
#code(link){{
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を設定
- ``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]]
-- JTableのヘッダ自体を非表示にする場合のサンプル
-- ``JTable``のヘッダ自体を非表示にする場合のサンプル

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