JTableの列にEnumSetを使用する
Total: 6379
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTable
の列にEnumSet
を設定し、その状態をJCheckBox
を使ったレンダラーで表示します。
Screenshot
Advertisement
サンプルコード
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;
}
// ...
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTableのCellにJCheckBoxを複数配置すると同様に第1
列目のパーミッションを表示するセルにJCheckBox
を3
つ配置したJPanel
で作成したセルレンダラーを適用していますが、モデルのデータはビットフラグではなくEnumSet
を使用するように変更しています。
参考リンク
- JTableのCellにJCheckBoxを複数配置する
- EnumSet (Java Platform SE 8)
- フラグとしての論理和(EnumSetの例) - Java列挙型メモ(Hishidama's Java enum Memo)