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

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

0

ロールオーバーした際のチェックボックスの背景色について

すいませんが、また質問させてください。
以前に質問した際には0列目セルとヘッダーセルを変色させてロールオーバーするよう教わりましたが、これに自力で指定セルの背景色も変色させて合計3セルを同時に変色するようにしました。

そして上記とは別のJTableに0列目に項目名、1列目から6列目までのセルにチェックボックスを配置した13行のJTableをロールオーバーした際に0列目セルとヘッダーセルの変色の他にチェックボックスが配置されたセルの背景色を変色することは可能でしょうか?
ネット検索等でも調べてみましたが該当するページはないようなので質問させていただききました。
どうか宜しくお願いします。

3

回答

5996

閲覧

3件の回答

評価

0

>ネット検索等でも調べてみましたが該当するページはないようなので
何を調べたのかを書く。

評価

0

$さん、回答をいただきましてありがとうございます。

自分なりに調べてみた1つはネット検索で「2007-12-27  【swing】NimbusのJTableにおけるCheckBoxのレンダリングバグに対応する(URL:http://www.achacolate.com/it/article.php?c=java&d=2007-12-27)」というのを見つけてチェックボックスのロールオーバーの参考になるのでは?と考えて以下にコードを記述してみました。

//チェックボックス
TableColumnModel tcm = jTable0.getColumnModel();
JCheckBox chbox0 = new JCheckBox( "", false );
//1から6列目までチェックボックスを配置
for (int l = 1; l < 6; l++){
    tcm.getColumn(l).setCellRenderer( new CheckBoxRenderer());
        tcm.getColumn(l).setCellEditor(new DefaultCellEditor(chbox0));
}

以下はCheckBoxRenderer.javaです。
import java.awt.Color;
import java.awt.Component;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

//チェックボックスのレンダラークラス
public class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
      public CheckBoxRenderer() {
          //チェックボックスを中央揃えに配置
          setHorizontalAlignment(JLabel.CENTER);
}

    public Component getTableCellRendererComponent(JTable table, 
            Object value, boolean isSelected, boolean hasFocus,int row, 
            int column){
        
        if (isSelected) {
            setForeground(table.getSelectionForeground());
            setBackground(table.getSelectionBackground());
            
        } else {
            setForeground(table.getForeground());
            //チェックした場合に背景色を明るい赤色に
            setBackground( new Color( 255, 51, 51 ) );
            //(table.getBackground());
        }
            setSelected((value != null 
            && ((Boolean)value).booleanValue()));
        return this;
    }
}

上記コードではチェックボックスにチェックを入れた一瞬だけ背景色が変色するだけでロールオーバーになりません。

、2つ目は「hasFocus」がロールオーバーに関係しているのではないか?と考えてみましたが、「このComponent がフォーカス所有者の場合は true を返します。」ということでした。
どうか教えてください。
宜しくお願いします。

評価

0

自己解決しました。
ありがとうございました。

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