Class EnumComboBoxModel<E extends java.lang.Enum<E>>

  • All Implemented Interfaces:
    java.awt.event.ActionListener, java.io.Serializable, java.util.EventListener, javax.swing.ComboBoxModel, javax.swing.ListModel

    public class EnumComboBoxModel<E extends java.lang.Enum<E>>
    extends ListComboBoxModel<E>

    A ComboBoxModel implementation that safely wraps an Enum. It allows the developer to directly use an enum as their model for a combobox without any extra work, though the display can can be further customized.

    Simple Usage

    The simplest usage is to wrap an enum inside the EnumComboBoxModel and then set it as the model on the combo box. The combo box will then appear on screen with each value in the enum as a value in the combobox.

    ex:

    
      enum MyEnum { GoodStuff, BadStuff };
      ...
      JComboBox combo = new JComboBox();
      combo.setModel(new EnumComboBoxModel(MyEnum.class));
     

    Type safe access

    By using generics and co-variant types you can make accessing elements from the model be completely typesafe. ex:

    
     EnumComboBoxModel<MyEnum> enumModel = new EnumComboBoxModel<MyEnum1>(
             MyEnum1.class);
     
     MyEnum first = enumModel.getElement(0);
     
     MyEnum selected = enumModel.getSelectedItem();
     

    Advanced Usage

    Since the exact toString() value of each enum constant may not be exactly what you want on screen (the values won't have spaces, for example) you can override to toString() method on the values when you declare your enum. Thus the display value is localized to the enum and not in your GUI code. ex:

    
        private enum MyEnum {GoodStuff, BadStuff;
            public String toString() {
               switch(this) {
                   case GoodStuff: return "Some Good Stuff";
                   case BadStuff: return "Some Bad Stuff";
               }
               return "ERROR";
            }
        };
     
    Note: if more than one enum constant returns the same String via toString(), this model will throw an exception on creation.
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.Class<E> enumClass  
      private static long serialVersionUID  
      private java.util.Map<java.lang.String,​E> valueMap  
      • Fields inherited from class javax.swing.AbstractListModel

        listenerList
    • Constructor Summary

      Constructors 
      Constructor Description
      EnumComboBoxModel​(java.lang.Class<E> en)
      Creates an EnumComboBoxModel for the enum represent by the Class en.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void setSelectedItem​(java.lang.Object anItem)
      Set the selected item.
      • Methods inherited from class javax.swing.AbstractListModel

        addListDataListener, fireContentsChanged, fireIntervalAdded, fireIntervalRemoved, getListDataListeners, getListeners, removeListDataListener
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface javax.swing.ListModel

        addListDataListener, removeListDataListener
    • Field Detail

      • valueMap

        private final java.util.Map<java.lang.String,​E extends java.lang.Enum<E>> valueMap
      • enumClass

        private final java.lang.Class<E extends java.lang.Enum<E>> enumClass
    • Constructor Detail

      • EnumComboBoxModel

        public EnumComboBoxModel​(java.lang.Class<E> en)
        Creates an EnumComboBoxModel for the enum represent by the Class en.
        Parameters:
        en - the enum class type
        Throws:
        java.lang.IllegalArgumentException - if the Enum.toString returns the same value for more than one constant
    • Method Detail

      • setSelectedItem

        public void setSelectedItem​(java.lang.Object anItem)
        Set the selected item. The implementation of this method should notify all registered ListDataListeners that the contents have changed.
        Specified by:
        setSelectedItem in interface javax.swing.ComboBoxModel<E extends java.lang.Enum<E>>
        Overrides:
        setSelectedItem in class ListComboBoxModel<E extends java.lang.Enum<E>>
        Parameters:
        anItem - the list object to select or null to clear the selection