屏幕ComboBoxModel基于枚举值

时间:2013-04-21 00:48:22

标签: java swing enums jcombobox

我正在尝试使用基于播放器枚举的枚举来填充组合框。

例如,在初始化游戏时,玩家选择一个阵营(FactionType)。 FactionType枚举用于每个单元的枚举值(ShipType)。 ShipType(FactionType)枚举,以便可以为适当的对象切换每个船只并进行实例化。我遇到的问题是如何仅使用玩家选择的那个阵营的单位来填充组合框。示例代码如下:

public enum FactionType {
faction1, faction2, faction3
}

public enum ShipType {
Ship1(faction1), Ship2(faction2), Ship3(faction3)

private FactionType faction;

private ShipType(FactionType faction)
this.faction = faction;
}

public FactionType getFaction() {
return this.faction
}

在过滤掉不属于玩家阵营的任何单位类型后,是否可以创建一个ComboBoxModel?通常我会做一个条件语句来检查player.faction = faction但不完全确定如何创建ComboBoxModel所以任何帮助都是值得赞赏的。

2 个答案:

答案 0 :(得分:1)

不是单独的enum类,而是按照here所述,为每个阵营考虑EnumSet

public enum Ship {

    Unit1, Unit2, Unit3, Unit4, Unit5, Unit6;
    public static Set<Ship> factionOne = EnumSet.range(Unit1, Unit5);
    public static Set<Ship> factionTwo = EnumSet.allOf(Ship.class);
}
...
DefaultComboBoxModel modelOne = new DefaultComboBoxModel();
for (Ship ship : Ship.factionOne) {
    modelOne.addElement(ship);
}

答案 1 :(得分:0)

我相信我的代码太复杂了。

将factions拆分为单独的枚举更简单,而不是使用FactionType和ShipType。这样每个派系数据都可以更好地封装,并且更容易为组合框模型设置。所以现在我的枚举将如此:

public enum factionOne {

unit1, unit2, unit3, unit4, unit5;

}

public enum factionTwo {

unit1, unit2, unit3, unit4, unit5, unit6;

}

etc......