• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JCheckBoxのセルをロールオーバーする
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2010-06-21
*JCheckBoxのセルをロールオーバーする [#sfa6e22d]
JTableのセルにJCheckBoxを使用したときでも、マウスカーソルでロールオーバーするように設定します。
---
category: swing
folder: RolloverBooleanRenderer
title: JCheckBoxのセルをロールオーバーする
tags: [JTable, JCheckBox, MouseListener, TableCellRenderer]
author: aterai
pubdate: 2010-06-21T15:14:48+09:00
description: JTableのセルにJCheckBoxを使用したときでも、マウスカーソルでロールオーバーするように設定します。
image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTSCUU481I/AAAAAAAAAiI/LzyeHFbwP40/s800/RolloverBooleanRenderer.png
hreflang:
    href: https://java-swing-tips.blogspot.com/2010/07/create-jcheckbox-rollover-effect-in.html
    lang: en
---
* 概要 [#summary]
`JTable`のセルに`JCheckBox`を使用したときでも、マウスカーソルでロールオーバーするように設定します。

-&jnlp;
-&jar;
-&zip;
#download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTSCUU481I/AAAAAAAAAiI/LzyeHFbwP40/s800/RolloverBooleanRenderer.png)

//#screenshot
#ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTSCUU481I/AAAAAAAAAiI/LzyeHFbwP40/s800/RolloverBooleanRenderer.png)

**サンプルコード [#h80337c0]
* サンプルコード [#sourcecode]
#code(link){{
class RolloverBooleanRenderer extends JCheckBox implements TableCellRenderer, UIResource {
  private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
  private final HighlightListener highlighter;
  public RolloverBooleanRenderer(HighlightListener highlighter) {
    super();
    this.highlighter = highlighter;
    setHorizontalAlignment(JLabel.CENTER);
    setHorizontalAlignment(SwingConstants.CENTER);
    setBorderPainted(true);
    setRolloverEnabled(true);
    setOpaque(true);
  }

  @Override public Component getTableCellRendererComponent(JTable table, Object value,
                               boolean isSelected, boolean hasFocus, int row, int column) {
    if(highlighter.isHighlightableCell(row, column)) {
        boolean isSelected, boolean hasFocus, int row, int column) {
    if (highlighter.isHighlightableCell(row, column)) {
      getModel().setRollover(true);
    }else{
    } else {
      getModel().setRollover(false);
    }
    if(isSelected) {
    if (isSelected) {
      setForeground(table.getSelectionForeground());
      super.setBackground(table.getSelectionBackground());
    }else{
    } else {
      setForeground(table.getForeground());
      setBackground(table.getBackground());
    }
    setSelected((value != null && ((Boolean)value).booleanValue()));
    if(hasFocus) {
    setSelected((value != null && ((Boolean) value).booleanValue()));
    if (hasFocus) {
      setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
    }else{
    } else {
      setBorder(noFocusBorder);
    }
    return this;
  }
}
}}

**解説 [#r4c302c8]
-上: デフォルト
-下: JTable#setDefaultRendererメソッドで、Object, Number, Booleanクラスそれぞれに、マウスカーソルに反応するレンダラーを設定
-- これらは、JTable$BooleanRendererクラスなどを参考に作成
-- JCheckBoxのロールオーバーは、JCheckBox#getModel()#setRollover(boolean)メソッドを使用
* 解説 [#explanation]
- 上:
-- デフォルト
- 下:
-- `JTable#setDefaultRenderer`メソッドで`Object`、`Number`、`Boolean`クラスそれぞれにマウスカーソルに反応するセルレンダラーを設定
-- これらのセルレンダラーはデフォルトの`JTable$BooleanRenderer`クラスなどを参考に作成
-- `JCheckBox`のロールオーバー表示は`JCheckBox#getModel()#setRollover(boolean)`メソッドを使用

//**参考リンク
**コメント [#ie467e8b]
* 参考リンク [#reference]
- [[JTableが使用するBooleanCellEditorの背景色を変更>Swing/BooleanCellEditor]]

* コメント [#comment]
#comment
#comment