我有几个JComboBox
,其中一些值与previus选择有关。
我的所有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
中只填充少量枚举,如下所示:
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中使用任何包装类。
谢谢你的建议
答案 0 :(得分:2)
new E[]
暗示
E[] enumComboItems = (E[]) allowedValues.toArray();
因为类型擦除会产生Object[]
。
逐个添加项目,或者复古:
Vector<E> enumComboItems = new Vector<>(allowedValues);
comboBox.setModel(new DefaultComboBoxModel<>(enumComboItems));
这也可以通过将enum类保持为运行时字段,构造函数的参数来解决。