Swing/EnumSet の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/EnumSet へ行く。
- Swing/EnumSet の差分を削除
--- 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.allOf(Permissions.class)}, {"group", EnumSet.of(Permissions.READ)}, {"other", EnumSet.noneOf(Permissions.class)} }; // ... class CheckBoxesEditor extends CheckBoxesPanel implements TableCellEditor { @Override public Object getCellEditorValue() { Set<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`を`3`つ配置した`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)] - [https://www.ne.jp/asahi/hishidama/home/tech/java/enum.html#h2_flag フラグとしての論理和(EnumSetの例) - Java列挙型メモ(Hishidama's Java enum Memo)] * コメント [#comment] #comment #comment