Use ClassChooser to select grain type. Looks nicer
authorBill Kuker <bkuker@billkuker.com>
Mon, 8 Nov 2010 12:11:47 +0000 (12:11 +0000)
committerBill Kuker <bkuker@billkuker.com>
Mon, 8 Nov 2010 12:11:47 +0000 (12:11 +0000)
gui/com/billkuker/rocketry/motorsim/visual/ClassChooser.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java

index e37a4536cc8562ab768b45c64ce998d43f06d4fe..aae779945f564259b9a9bcba376459a7189a40fb 100644 (file)
@@ -27,6 +27,7 @@ public abstract class ClassChooser<T> extends JComboBox {
                \r
        private DefaultComboBoxModel model ;\r
        \r
+       @SuppressWarnings("unchecked")\r
        public ClassChooser(Collection<Class<? extends T>> options, T current){\r
                super(new DefaultComboBoxModel());\r
                model = (DefaultComboBoxModel)getModel();\r
@@ -41,7 +42,6 @@ public abstract class ClassChooser<T> extends JComboBox {
                addActionListener(new ActionListener(){\r
                        @Override\r
                        public void actionPerformed(ActionEvent e) {\r
-                               @SuppressWarnings("unchecked")\r
                                Class<? extends T> selected = ((Element)getSelectedItem()).clazz;\r
                                lastVal.put(selected, classSelected(selected, lastVal.get(selected)));\r
                        }});\r
index b12815bf30eacc7957c3b3612b6f694ae6220d6a..be9f10adcc371c9fe97ecf64b0577bf90116b9ec 100644 (file)
@@ -12,22 +12,17 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;\r
 import java.beans.PropertyVetoException;\r
 import java.util.Collection;\r
-import java.util.HashMap;\r
 import java.util.List;\r
-import java.util.Map;\r
 import java.util.Vector;\r
 \r
-import javax.measure.quantity.Length;\r
 import javax.measure.unit.SI;\r
 import javax.swing.Box;\r
 import javax.swing.BoxLayout;\r
 import javax.swing.DefaultComboBoxModel;\r
-import javax.swing.JButton;\r
 import javax.swing.JComboBox;\r
 import javax.swing.JFrame;\r
 import javax.swing.JLabel;\r
 import javax.swing.JPanel;\r
-import javax.swing.JProgressBar;\r
 import javax.swing.JSplitPane;\r
 import javax.swing.JTabbedPane;\r
 import javax.swing.JTextArea;\r
@@ -48,7 +43,6 @@ import com.billkuker.rocketry.motorsim.Fuel;
 import com.billkuker.rocketry.motorsim.Grain;\r
 import com.billkuker.rocketry.motorsim.Motor;\r
 import com.billkuker.rocketry.motorsim.Nozzle;\r
-import com.billkuker.rocketry.motorsim.RocketScience;\r
 import com.billkuker.rocketry.motorsim.cases.Schedule40;\r
 import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
 import com.billkuker.rocketry.motorsim.grain.CSlot;\r
@@ -106,43 +100,6 @@ public class MotorEditor extends JPanel implements PropertyChangeListener {
                chamberTypes.add(Schedule40.class);\r
        }\r
 \r
-       private abstract class Chooser<T> extends JPanel {\r
-               private static final long serialVersionUID = 1L;\r
-               private List<Class<? extends T>> types;\r
-               private Map<Class<? extends T>, T> old = new HashMap<Class<? extends T>, T>();\r
-\r
-               @SuppressWarnings("unchecked")\r
-               public Chooser(T initial, List<Class<? extends T>> ts) {\r
-                       types = ts;\r
-                       if ( initial != null )\r
-                               old.put((Class<? extends T>)initial.getClass(), initial);\r
-                       setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));\r
-                       for (final Class<? extends T> c : types) {\r
-                               JButton b = new JButton(c.getSimpleName());\r
-                               add(b);\r
-                               b.addActionListener(new ActionListener() {\r
-                                       public void actionPerformed(ActionEvent e) {\r
-                                               try {\r
-                                                       T val = old.get(c);\r
-                                                       if ( val == null ){\r
-                                                               System.err.println("CREATED NEW =========================");\r
-                                                               val = c.newInstance();\r
-                                                               old.put(c, val);\r
-                                                       }\r
-                                                       choiceMade(val);\r
-                                               } catch (InstantiationException e1) {\r
-                                                       e1.printStackTrace();\r
-                                               } catch (IllegalAccessException e1) {\r
-                                                       e1.printStackTrace();\r
-                                               }\r
-                                       }\r
-                               });\r
-                       }\r
-               }\r
-\r
-               protected abstract void choiceMade(T o);\r
-       }\r
-\r
        private class BurnTab extends JPanel {\r
                private static final long serialVersionUID = 1L;\r
                private Thread currentThread;\r
@@ -216,12 +173,23 @@ public class MotorEditor extends JPanel implements PropertyChangeListener {
                                p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));\r
                                p.add(new Editor(g));\r
                                for (Grain gg : ((Grain.Composite) g).getGrains()) {\r
-                                       final int grainEditorIndex = p.getComponentCount() + 1;\r
-                                       p.add(new Chooser<Grain>(gg, grainTypes) {\r
+                                       final int grainEditorIndex = p.getComponentCount() + 2;\r
+                                       p.add(new JLabel("Grain Type:"));\r
+                                       p.add(new ClassChooser<Grain>(grainTypes, gg) {\r
                                                private static final long serialVersionUID = 1L;\r
 \r
                                                @Override\r
-                                               protected void choiceMade(Grain ng) {\r
+                                               protected Grain classSelected(\r
+                                                               Class<? extends Grain> clazz, Grain ng) {\r
+                                                       if ( ng == null ){\r
+                                                               try {\r
+                                                                       ng = clazz.newInstance();\r
+                                                               } catch (InstantiationException e) {\r
+                                                                       e.printStackTrace();\r
+                                                               } catch (IllegalAccessException e) {\r
+                                                                       e.printStackTrace();\r
+                                                               }\r
+                                                       }\r
                                                        if (g instanceof MultiGrain) {\r
                                                                ((MultiGrain) g).setGrain(ng);\r
                                                                p.remove(grainEditorIndex);\r
@@ -229,6 +197,8 @@ public class MotorEditor extends JPanel implements PropertyChangeListener {
                                                                p.remove(0);\r
                                                                p.add(new Editor(g), 0);\r
                                                        }\r
+                                                       return ng;\r
+\r
                                                }\r
                                        });\r
                                        p.add(new Editor(gg));\r