TITLE:JTableのヘッダを透明化

Posted by aterai at 2011-04-04

JTableのヘッダを透明化

JTableのヘッダ背景、セル間の垂直罫線を非表示にします。

  • &jnlp;
  • &jar;
  • &zip;
TransparentTableHeader.png

サンプルコード

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;
  }
}

解説

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

参考リンク

コメント