Swing/EnumSet のバックアップの現在との差分(No.1)
TITLE:JTableの列にEnumSetを使用する
Posted by aterai at 2012-05-21
JTableの列にEnumSetを使用する
JTableの列にEnumSetを設定し、その状態をJCheckBoxを使ったレンダラーで表示します。-
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: https://java-swing-tips.blogspot.com/2011/03/checkboxes-in-jtable-cell.html lang: en
概要
JTable
の列にEnumSet
を設定し、その状態をJCheckBox
を使ったレンダラーで表示します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
enum Permissions { EXECUTE, WRITE, READ }#spanend
#spandel
private final Object[][] data = {
#spanend
{"owner", EnumSet.of(Permissions.READ, Permissions.WRITE, Permissions.EXECUTE)},
#spanadd
Object[][] data = {
#spanend
{"owner", EnumSet.allOf(Permissions.class)},
{"group", EnumSet.of(Permissions.READ)},
{"other", EnumSet.noneOf(Permissions.class)}
};
#spandel
#spanend
#spandel
@Override public Object getCellEditorValue() {
#spanend
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;
#spandel
}
#spanend
#spanadd
// ...
#spanend
#spanadd
class CheckBoxesEditor extends CheckBoxesPanel implements TableCellEditor {
#spanend
@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;
}
// ...
解説
上記のサンプルでは、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)