Swing/TransparentTableHeader のバックアップ(No.18)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TransparentTableHeader へ行く。
- 1 (2011-07-14 (木) 11:19:03)
- 2 (2011-07-14 (木) 15:56:15)
- 3 (2012-12-22 (土) 16:06:02)
- 4 (2013-08-17 (土) 00:59:39)
- 5 (2014-03-25 (火) 14:56:12)
- 6 (2014-11-21 (金) 18:20:40)
- 7 (2015-03-08 (日) 19:36:54)
- 8 (2015-04-08 (水) 17:13:52)
- 9 (2015-06-22 (月) 17:56:23)
- 10 (2015-10-01 (木) 00:08:52)
- 11 (2016-01-08 (金) 19:19:21)
- 12 (2016-01-13 (水) 13:32:29)
- 13 (2016-06-01 (水) 19:05:48)
- 14 (2017-09-07 (木) 21:23:19)
- 15 (2018-02-24 (土) 19:51:30)
- 16 (2019-01-22 (火) 18:20:42)
- 17 (2020-12-01 (火) 11:00:37)
- 18 (2023-02-23 (木) 18:39:19)
- 19 (2024-02-02 (金) 11:54:50)
- 20 (2024-02-15 (木) 20:19:31)
- category: swing
folder: TransparentTableHeader
title: JTableのヘッダを透明化
tags: [JTable, JTableHeader, Transparent, JScrollPane, JViewport, TableCellRenderer, TableCellEditor]
author: aterai
pubdate: 2011-04-04T16:49:46+09:00
description: JTableのヘッダ背景、セル間の垂直罫線を非表示にします。
image:
hreflang:
href: https://java-swing-tips.blogspot.com/2011/04/transparent-jtableheader.html lang: en
概要
JTable
のヘッダ背景、セル間の垂直罫線を非表示にします。
Screenshot
Advertisement
サンプルコード
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(0x0, true);
@Override public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
this.setText(Objects.toString(value, ""));
this.setHorizontalAlignment(SwingConstants.CENTER);
this.setOpaque(false);
this.setBackground(alphaZero);
this.setForeground(Color.BLACK);
this.setBorder(b);
return this;
}
}
View in GitHub: Java, Kotlin解説
JTableHeader
JTableHeader
とヘッダセルレンダラーの背景を透明:setOpaque(false)
、かつ背景色:Color(0x0, true)
に設定
JTable
、JScrollPane
(Viewport
、ColumnHeader
)の背景も透明:setOpaque(false)
、かつ背景色:Color(0x0, true)
に設定- 背景パターンは
JScrollPane#paintComponent(...)
をオーバーライドして描画- JTableを半透明にするは
JViewport#paintComponent(...)
をオーバーライド
- JTableを半透明にするは
- 背景パターンは
VerticalLine
- セル間の垂直線を
table.setShowVerticalLines(false)
で非表示に設定 - セル間の幅を
table.setIntercellSpacing(new Dimension(0, 1))
で0
に設定して選択時に罫線の跡を非表示化
- セル間の垂直線を
Boolean.class
のDefaultRenderer
- 透明化した
BooleanCellRenderer
やBooleanCellEditor
を設定
- 透明化した
- 注:
ColumnHeader
には、scroll.setColumnHeader(new JViewport())
とダミーのJViewport
を設定しておかないとNullPointerException
が発生するscroll.setOpaque(false); scroll.setBackground(alphaZero); scroll.getViewport().setOpaque(false); scroll.getViewport().setBackground(alphaZero); scroll.setColumnHeader(new JViewport()); // Dummy JViewport scroll.getColumnHeader().setOpaque(false); scroll.getColumnHeader().setBackground(alphaZero);
- レンダラーとして使用している
JCheckBox
の揃えをupdateUI()
メソッドをオーバーライドしてsetHorizontalAlignment(SwingConstants.CENTER)
で中央に変更していたが無効になっている?- 何時からなのか不明
getTableCellRendererComponent(...)
中でsetHorizontalAlignment(SwingConstants.CENTER)
を毎回設定して回避
参考リンク
- JTableを半透明にする
- JTableHeaderを非表示にする
JTable
のヘッダ自体を非表示にする場合のサンプル
- JTable#setShowVerticalLines(boolean) (Java Platform SE 8)