• 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: http://java-swing-tips.blogspot.com/2011/03/checkboxes-in-jtable-cell.html
       lang: en

概要

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

サンプルコード

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;
  }
  //...
View in GitHub: Java, Kotlin

解説

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

参考リンク

コメント