package com.onaro.util.jfc.enumeration; import java.awt.Dimension; import java.util.EnumSet; import java.util.Vector; import javax.swing.JComboBox; /** * Combobox component for enum values. * */ public class EnumComboBox> extends JComboBox { private static final long serialVersionUID = 1L; EnumSelectionListener listener; public EnumComboBox(E[] values, final E initialSelection) { this(values,initialSelection,null,null); } public EnumComboBox(E[] values, final E initialSelection, EnumSelectionListener listener, final EnumDecorationRepository decorationRepository) { super(values); init(initialSelection, listener, decorationRepository); } public EnumComboBox(Class clazz, final E initialSelection) { this(EnumSet.allOf(clazz), initialSelection, null, null); } public EnumComboBox(Class clazz, final E initialSelection, EnumSelectionListener listener, final EnumDecorationRepository decorationRepository) { this(EnumSet.allOf(clazz), initialSelection, listener, decorationRepository); } public EnumComboBox(EnumSet enumSet, final E initialSelection, EnumSelectionListener listener, final EnumDecorationRepository decorationRepository) { super(new Vector(enumSet)); init(initialSelection, listener, decorationRepository); } private void init(final E initialSelection, EnumSelectionListener listener, final EnumDecorationRepository decorationRepository) { setDecorationRepository(decorationRepository); if(initialSelection != null){ setSelectedItem(initialSelection); } //the listener is set after the default is selected to avoid from firing event at initialization this.listener = listener; } @SuppressWarnings("unchecked") private void setDecorationRepository(EnumDecorationRepository decorationRepository) { if (decorationRepository != null) { setRenderer(new EnumListCellRenderer(decorationRepository, getRenderer())); } } protected void selectedItemChanged() { fireEnumSelectionEvent(false); super.selectedItemChanged(); fireEnumSelectionEvent(true); } @SuppressWarnings("unchecked") private void fireEnumSelectionEvent(boolean selected) { if (listener != null) { //since the values in the combobox are thee enumration values, it's OK to cast them listener.selectionChanged(new EnumSelectionEvent(this,(E) selectedItemReminder,selected,false)); } } public void setListener(EnumSelectionListener listener) { this.listener = listener; } @SuppressWarnings("unchecked") public E getSelectedEnum() { return (E) super.getSelectedItem(); } /** * Fixes the toolbar's problem in which the combo-box consume all the * space available in the toolbar by limiting its size. * * @return the maximum allowed size for this combo-box */ public Dimension getMaximumSize() { return getPreferredSize(); } }