TITLE:JTableの列にEnumSetを使用する
#navi(../)
RIGHT:Posted by &author(aterai); at 2012-05-21
*JTableの列にEnumSetを使用する [#fd986dd9]
JTableの列にEnumSetを設定し、その状態をJCheckBoxを使ったレンダラーで表示します。

-&jnlp;
-&jar;
-&zip;

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

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

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

#code{{
@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;
}
}}

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

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

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