Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JTableのヘッダーに画像を配置するには?

12行2列のJTableのヘッダーの1列目に画像を配置したいの
ですが、ネット検索等で調べた結果として以下のコードを
書きましたが、結果として画像は標示されずに文字が標示
されました。
画像を配置するコードは最下部にあります。

column.setHeaderValue(redarrow);
上記コードが間違っているような気がするんですが適切な
コードがわかりません。

どうかご指導お願いします。

private JTable getJTable0() {
    if (jTable0 == null) {
        jTable0 = new RollOverTable(12,2);
    
        jTable0.setModel(new 
DefaultTableModel(new Object[][] {
            { "a",  new Boolean(false), 
},
            { "b",  new Boolean(false), 
},
            { "c",  new 
Boolean(false),},
            { "d",  new 
Boolean(false),},
            { "e",  new Boolean(false) 
},
            { "f",   new 
Boolean(false),},
            { "g",   new Boolean(false), 
},
            { "h",  new Boolean(false), 
},
            { "i",  new Boolean(false), 
},
            { "j",  new Boolean(false), 
},
            { "k",   new Boolean(false), 
},
            { "l",  new Boolean(false), 
},
            }, new String [] { "スタイ
ル", "", }) {
            private static final long 
serialVersionUID = 1L;
            Class<?>[] types = new 
Class<?>[] { Object.class, Object.class, };
            
            public Class<?> 
getColumnClass(int columnIndex) {
                return 
types[columnIndex];
            }
        });
        
        //セルの高さ
        jTable0.setRowHeight(48);
        
        //罫線
        jTable0.setShowGrid(true);
        //罫線のカラーをグレーに
        jTable0.setGridColor(Color.gray);
        
        //0行目のセルを編集不可にする
            DefaultCellEditor ce = 
(DefaultCellEditor)jTable0.getDefaultEditor(Object.c
lass);
            
ce.setClickCountToStart(Integer.MAX_VALUE);
            
        //ヘッダーセル用レンダラーをセットす
る処理
        JTableHeader header = 
jTable0.getTableHeader();
        header.setDefaultRenderer( new 
HeaderColorRenderer() );
        //ヘッダーフォントサイズの調整
        Dimension dim = 
header.getPreferredSize();
        //変更するヘッダの高さ
        dim.height = 48;
        header.setPreferredSize( dim );
            //ヘッダーの固定
            header.setReorderingAllowed( false 
);
        //文字のセンター揃え
        header.setDefaultRenderer(new 
HeaderRenderer(header.getDefaultRenderer()));
        //ヘッダー「1」に画像を配置
        ImageIcon idr = new 
ImageIcon(getClass().getResource("down-32-
red.png"));
        JLabel redarrow = new JLabel(idr, 
JLabel.CENTER);
            TableColumnModel columnModel = 
jTable0.getColumnModel();
            TableColumn column = 
columnModel.getColumn(1);
            column.setHeaderValue(redarrow);
    }
    return jTable0;
}

2

回答

8591

閲覧

2件の回答

評価

0

回答ではありませんが
JTableHeader Image
でググるとトップにサンプルコードのあるサイトがありました。

評価

0

自己解決しました。

コードをJTable内に書くのではなく、RollOverTable内に
以下のコードを書くことで解決しました。

class HeaderColorRenderer extends JLabel implements 
TableCellRenderer{
public HeaderColorRenderer(){
super();
setOpaque( true );
ヘッダーセルの枠線を表示
setBorder(BorderFactory.createEtchedBorder());
}

@Override
public Component getTableCellRendererComponent( 
JTable table,
    Object value,
        boolean isSelected,
    boolean hasFocus,
    int row,
    int column ){


//ヘッダー1列目
if(  column == 1){
//画像
ImageIcon idr = new 
ImageIcon(getClass().getResource("down-32-
green.png"));
//画像をセット
setIcon(idr);
//ヘッダーセルの中央に配置
setHorizontalTextPosition(JLabel.CENTER);
}else{
//0列目は画像表示なしなのでnull
setIcon(null);
}

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。