Swing/EnumSet のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/EnumSet へ行く。
- 1 (2012-12-11 (火) 20:49:33)
- 2 (2013-01-29 (火) 23:45:06)
- 3 (2014-12-02 (火) 01:23:29)
- 4 (2016-02-19 (金) 15:02:22)
- 5 (2017-07-12 (水) 13:01:47)
- 6 (2018-02-24 (土) 19:51:30)
- 7 (2018-07-12 (木) 18:07:28)
- 8 (2018-08-16 (木) 14:19:33)
- 9 (2019-02-20 (水) 15:33:38)
- 10 (2019-04-19 (金) 13:43:27)
- 11 (2019-05-22 (水) 19:35:38)
- 12 (2019-08-29 (木) 15:54:58)
- 13 (2021-04-20 (火) 20:02:00)
- 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
を使ったレンダラーで表示します。
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)