簡體   English   中英

Java:將EnumSet轉換為原始數組E [](用法:JComboBox DefaultComboBoxModel)

[英]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) 

嘗試過前面的示例,通過了CollectionsArrays.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM