[英]Java: convert an EnumSet to a primitive array E[] (usage: JComboBox DefaultComboBoxModel)
我有幾個JComboBox
,其中的一些值取決於之前的選擇。
我所有的jComboBox都是這樣輸入的:
JComboBox<E> comboBox
而且我可以用一個完美工作的方法創建一個不錯的DefaultComboBoxModel
:
public static <E extends Enum<E> & MyEnumInterface> JComboBox<E> createCompleteJComboBox( final Class<E> clazz, boolean startsDisabled)
{
JComboBox<E> comboBox = new JComboBox<>();
comboBox.setModel(new DefaultComboBoxModel<>(clazz.getEnumConstants()));
comboBox.insertItemAt(null, 0);
comboBox.setSelectedIndex(0);
comboBox.setEditable(false);
comboBox.setEnabled(!startsDisabled);
return comboBox;
}
然后我有一些JComboBox我想在以前創建的EnumSet
只填充幾個EnumSet
,就像這樣:
public static <E extends Enum<E> & MyEnumInterface> void applyCustomValueList2(JComboBox<E> comboBox, final Set<E> allowedValues)
{
// List<E> llist = new ArrayList<E>(allowedValues.size());
boolean hasAnyValue = allowedValues == null ? false : true;
int size = hasAnyValue ? (allowedValues.size() + 1) : 1;
if (hasAnyValue)
{
List<E> sl = new ArrayList<>(allowedValues);
E[] enumComboItems = (E[]) allowedValues.toArray();
comboBox.setModel(new DefaultComboBoxModel<>(enumComboItems));
}
comboBox.setEnabled(hasAnyValue);
}
但是我無法在原始E []中轉換EnumSet allowedValues。
09:32:01:625 [ERROR] ( AWT-EventQueue-0) (XXXController.java:208) - uncaught exception in thread AWT-EventQueue-0:[Ljava.lang.Object; cannot be cast to [Ljava.lang.Enum; java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Enum; at xyz.xzad.asdasd.asdasd.ComboCreator.applyCustomValueList2(ComboCreator.java:74) at xyz.xzad.asdasd.asdasd..Panel$MyItemChangeListner.itemStateChanged(PanelSettingsAnagraphics.java:975) at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1225)
嘗試過前面的示例,通過了Collections
和Arrays.asList
但是我做錯了。
任何想法?
我寧願不要在DefaultComboBoxModel中使用任何包裝器類。
謝謝你的建議
new E[]
由暗示
E[] enumComboItems = (E[]) allowedValues.toArray();
將由於類型擦除將給一個Object[]
。
要么逐項添加項目,要么復古:
Vector<E> enumComboItems = new Vector<>(allowedValues);
comboBox.setModel(new DefaultComboBoxModel<>(enumComboItems));
通過將枚舉類保留為構造函數的運行時字段,這也可以解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.