Swing/EnumSet のバックアップの現在との差分(No.4)
-
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:
hreflang:
href: http://java-swing-tips.blogspot.com/2011/03/checkboxes-in-jtable-cell.html href: https://java-swing-tips.blogspot.com/2011/03/checkboxes-in-jtable-cell.html lang: en
概要
概要
JTable
の列にEnumSet
を設定し、その状態をJCheckBox
を使ったレンダラーで表示します。
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
enum Permissions { EXECUTE, WRITE, READ; }
#spanend
#spandel
//...
#spanend
#spandel
private final Object[][] data = {
#spanend
{"owner", EnumSet.of(Permissions.READ, Permissions.WRITE, Permissions.EXECUTE)},
#spanadd
enum Permissions { EXECUTE, WRITE, READ }
#spanend
#spanadd
#spanend
#spanadd
Object[][] data = {
#spanend
{"owner", EnumSet.allOf(Permissions.class)},
{"group", EnumSet.of(Permissions.READ)},
{"other", EnumSet.noneOf(Permissions.class)}
};
#spandel
//...
#spanend
#spanadd
#spanend
#spanadd
// ...
#spanend
class CheckBoxesEditor extends CheckBoxesPanel implements TableCellEditor {
@Override public Object getCellEditorValue() {
EnumSet<Permissions> f = EnumSet.noneOf(Permissions.class);
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
を配置したJPanel
で作成したセルレンダラーで表現していますが、モデルのデータはビットフラグではなく、EnumSet
を使用するように変更しています。
解説
上記のサンプルでは、JTableのCellにJCheckBoxを複数配置すると同様に第1
列目のパーミッションを表示するセルにJCheckBox
を3
つ配置したJPanel
で作成したセルレンダラーを適用していますが、モデルのデータはビットフラグではなくEnumSet
を使用するように変更しています。
参考リンク
参考リンク
- JTableのCellにJCheckBoxを複数配置する
- フラグとしての論理和(EnumSetの例) - Java列挙型メモ(Hishidama's Java enum Memo)
- EnumSet (Java Platform SE 8)
- フラグとしての論理和(EnumSetの例) - Java列挙型メモ(Hishidama's Java enum Memo)