我正在尝试使用基于玩家枚举的枚举填充组合框。

例如,在初始化游戏时,玩家选择一个派系(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 =派系,但不能完全确定如何创建ComboBoxModel,因此可以提供任何帮助。

最佳答案

代替单独的enum类,为每个派系考虑一个EnumSet,如here所述。

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);
}

09-26 05:53