2013-04-21 54 views
0

我想使用基於玩家枚舉的枚舉來填充組合框。基於枚舉值的屏幕ComboBoxModel

例如,初始化遊戲時,玩家選擇一個派系(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,所以任何幫助表示讚賞。

回答

0

我相信我已經完成了我的代碼。

而不是有一個FactionType和ShipType,將分裂成單獨的枚舉更簡單。這樣每個派系數據都可以更好地封裝並更容易設置組合框模型。所以現在我的枚舉會看起來像這樣:

public enum factionOne { 

unit1, unit2, unit3, unit4, unit5; 

} 

public enum factionTwo { 

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

} 

etc...... 
1

而不是單獨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); 
}