JTableのヘッダを透明化
Total: 10603, Today: 2, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JTableのヘッダ背景、セル間の垂直罫線を非表示にします。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
JTableHeaderJTableHeaderとヘッダセルレンダラーの背景を透明: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()); // Empty JViewport scroll.getColumnHeader().setOpaque(false); scroll.getColumnHeader().setBackground(alphaZero);
- レンダラーとして使用している
JCheckBoxの揃えをupdateUI()メソッドをオーバーライドしてsetHorizontalAlignment(SwingConstants.CENTER)で中央に変更していたが無効になっている?- 何時からなのか不明
getTableCellRendererComponent(...)中でsetHorizontalAlignment(SwingConstants.CENTER)を毎回設定して回避
Reference
- JTableを半透明にする
- JTableHeaderを非表示にする
JTableのヘッダ自体を非表示にする場合のサンプル
- JTable#setShowVerticalLines(boolean) (Java Platform SE 8)