View Javadoc
1   package fr.ifremer.quadrige3.ui.swing.component;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: UI Swing Common
6    * %%
7    * Copyright (C) 2017 - 2019 Ifremer
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU Affero General Public License as published by
11   * the Free Software Foundation, either version 3 of the License, or
12   * (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU Affero General Public License
20   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21   * #L%
22   */
23  
24  import fr.ifremer.quadrige3.core.dao.technical.Assert;
25  import fr.ifremer.quadrige3.core.dao.technical.enumeration.EnumValue;
26  
27  import javax.swing.DefaultComboBoxModel;
28  import javax.swing.DefaultListCellRenderer;
29  import javax.swing.JComboBox;
30  import javax.swing.JList;
31  import java.awt.Component;
32  
33  /**
34   * @author peck7 on 18/06/2019.
35   */
36  @SuppressWarnings("unchecked")
37  public class EnumValueComboBox<V extends EnumValue> extends JComboBox<V> {
38  
39      public <E extends Enum<E>> EnumValueComboBox(Class<E> enumClass) {
40          super();
41          Assert.isTrue(EnumValue.class.isAssignableFrom(enumClass), "The enumeration class must implement EnumValue");
42  
43          setModel(new DefaultComboBoxModel<>((V[]) enumClass.getEnumConstants()));
44  
45          setRenderer(new DefaultListCellRenderer() {
46              @Override
47              public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
48                  value = ((V) value).getLabel();
49                  return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
50              }
51          });
52      }
53  
54      @Override
55      public V getSelectedItem() {
56          return (V) super.getSelectedItem();
57      }
58  }