---
category: swing
folder: EnumSet
title: JTableの列にEnumSetを使用する
tags: [JTable, EnumSet, JCheckBox, TableCellRenderer, TableCellEditor]
author: aterai
pubdate: 2012-05-21T14:20:44+09:00
description: JTableの列にEnumSetを設定し、その状態をJCheckBoxを使ったレンダラーで表示します。
image: https://lh6.googleusercontent.com/-sFAMn6DioFo/T7nL6BrEaHI/AAAAAAAABM0/QqVOr4uGNdE/s800/EnumSet.png
hreflang:
    href: https://java-swing-tips.blogspot.com/2011/03/checkboxes-in-jtable-cell.html
    lang: en
---
* 概要 [#summary]
`JTable`の列に`EnumSet`を設定し、その状態を`JCheckBox`を使ったレンダラーで表示します。

#download(https://lh6.googleusercontent.com/-sFAMn6DioFo/T7nL6BrEaHI/AAAAAAAABM0/QqVOr4uGNdE/s800/EnumSet.png)

* サンプルコード [#sourcecode]
#code(link){{
enum Permissions { EXECUTE, WRITE, READ; }

Object[][] data = {
  {"owner", EnumSet.of(Permissions.READ, Permissions.WRITE, Permissions.EXECUTE)},
  {"group", EnumSet.of(Permissions.READ)},
  {"other", EnumSet.noneOf(Permissions.class)}
};

//...
class CheckBoxesEditor extends CheckBoxesPanel implements TableCellEditor {
  @Override public Object getCellEditorValue() {
    EnumSet<Permissions> f = EnumSet.noneOf(Permissions.class);
    if (buttons[0].isSelected()) f.add(Permissions.READ);
    if (buttons[1].isSelected()) f.add(Permissions.WRITE);
    if (buttons[2].isSelected()) f.add(Permissions.EXECUTE);
    return f;
  }
  //...
}}

* 解説 [#explanation]
上記のサンプルでは、[[JTableのCellにJCheckBoxを複数配置する>Swing/CheckBoxesInTableCell]]と同様に、パーミッション(第`1`列目)を`JCheckBox`を配置した`JPanel`で作成したセルレンダラーで表現していますが、モデルのデータはビットフラグではなく、`EnumSet`を使用するように変更しています。
上記のサンプルでは、[[JTableのCellにJCheckBoxを複数配置する>Swing/CheckBoxesInTableCell]]と同様に、パーミッション(第`1`列目)に`JCheckBox`を`3`つ配置した`JPanel`で作成したセルレンダラーで表現していますが、モデルのデータはビットフラグではなく、`EnumSet`を使用するように変更しています。

* 参考リンク [#reference]
- [[JTableのCellにJCheckBoxを複数配置する>Swing/CheckBoxesInTableCell]]
- [https://docs.oracle.com/javase/jp/8/docs/api/java/util/EnumSet.html EnumSet (Java Platform SE 8)]
- [http://www.ne.jp/asahi/hishidama/home/tech/java/enum.html#h2_flag フラグとしての論理和(EnumSetの例) - Java列挙型メモ(Hishidama's Java enum Memo)]

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