1 package com.billkuker.rocketry.motorsim.visual;
\r
3 import java.awt.event.ActionEvent;
\r
4 import java.awt.event.ActionListener;
\r
5 import java.util.Collection;
\r
6 import java.util.HashMap;
\r
7 import java.util.Map;
\r
9 import javax.swing.DefaultComboBoxModel;
\r
10 import javax.swing.JComboBox;
\r
12 public abstract class ClassChooser<T> extends JComboBox {
\r
13 private static final long serialVersionUID = 1L;
\r
15 private class Element {
\r
16 private final Class<? extends T> clazz;
\r
17 Element(Class<? extends T> clazz){
\r
21 public String toString(){
\r
22 return clazz.getSimpleName();
\r
26 private Map<Class<? extends T>, T> lastVal = new HashMap<Class<? extends T>, T>();
\r
28 private DefaultComboBoxModel model ;
\r
30 @SuppressWarnings("unchecked")
\r
31 public ClassChooser(Collection<Class<? extends T>> options, T current){
\r
32 super(new DefaultComboBoxModel());
\r
33 model = (DefaultComboBoxModel)getModel();
\r
34 for ( Class<? extends T> clazz : options){
\r
35 Element e = new Element(clazz);
\r
36 model.addElement(e);
\r
37 if ( clazz == current.getClass() )
\r
40 lastVal.put( (Class<? extends T>) current.getClass(), current);
\r
42 addActionListener(new ActionListener(){
\r
44 public void actionPerformed(ActionEvent e) {
\r
45 Class<? extends T> selected = ((Element)getSelectedItem()).clazz;
\r
46 lastVal.put(selected, classSelected(selected, lastVal.get(selected)));
\r
51 protected abstract T classSelected(Class<? extends T> clazz, T last);
\r