概要

JTableを追加したJViewportがセルで隠れていない部分の色を変更します。

サンプルコード

//JScrollPane scroll = new JScrollPane(table);
scroll.getViewport().add(table);
scroll.getViewport().setOpaque(true);
scroll.getViewport().setBackground(Color.WHITE);
//table.getParent().setBackground(Color.WHITE);
view all

解説

このページのタイトルなどで「JTableの背景色」としている部分は、実際はJTableの背景色ではなく、JTableを追加したJViewportがセルで隠れていない部分のことです。

このため、上記のスクリーンショットのように色をつけたい場合は、JTable自身の背景色を設定するのではなく、JViewportの背景色を設定する必要があります。サンプルコードではJScrollPaneからJViewportを取得していますが、JTable#getParent()メソッドからもJViewportを取得することができます。

上記のサンプルでは、背景色を不透明にするを選択して背景色を設定してやると、JViewportの背景色が変更されます。


セルの背景色を変更する場合は、TableCellRendererを使用(TableCellRendererでセルの背景色を変更)します。


ヘッダの背景色(カラムをマウスでドラッグ中に表示される)を変更する場合は、空のJViewportJScrollPaneのカラムヘッダに追加して、その背景色を変更します。

scroll.setColumnHeader(new JViewport());
//or scroll.setColumnHeaderView(new JLabel());
scroll.getColumnHeader().setBackground(Color.RED);

JDK 1.6.0で追加されたJTable#setFillsViewportHeightメソッドを使用してJTableJViewportの高さまで拡張しておけば、直接JTableの背景色を設定するだけでこのサンプルと同様の状態になります。(参考: JTable自体の高さを拡張)。

参考リンク

コメント