TITLE:JTableの列にEnumSetを使用する

Posted by at 2012-05-21

JTableの列にEnumSetを使用する

JTableの列にEnumSetを設定し、その状態をJCheckBoxを使ったレンダラーで表示します。

  • &jnlp;
  • &jar;
  • &zip;
EnumSet.png

サンプルコード

enum Permissions { EXECUTE, WRITE, READ; }
View in GitHub: Java, Kotlin
private final Object[][] data = {
  {"owner", EnumSet.of(Permissions.READ, Permissions.WRITE, Permissions.EXECUTE)},
  {"group", EnumSet.of(Permissions.READ)},
  {"other", EnumSet.noneOf(Permissions.class)}
};
@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;
}

解説

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

参考リンク

コメント