From 1c693d8a08082abe4552a6827d3328bd5b34d42a Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Mon, 8 Nov 2010 12:11:47 +0000 Subject: [PATCH] Use ClassChooser to select grain type. Looks nicer --- .../motorsim/visual/ClassChooser.java | 2 +- .../visual/workbench/MotorEditor.java | 62 +++++-------------- 2 files changed, 17 insertions(+), 47 deletions(-) diff --git a/gui/com/billkuker/rocketry/motorsim/visual/ClassChooser.java b/gui/com/billkuker/rocketry/motorsim/visual/ClassChooser.java index e37a453..aae7799 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/ClassChooser.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/ClassChooser.java @@ -27,6 +27,7 @@ public abstract class ClassChooser extends JComboBox { private DefaultComboBoxModel model ; + @SuppressWarnings("unchecked") public ClassChooser(Collection> options, T current){ super(new DefaultComboBoxModel()); model = (DefaultComboBoxModel)getModel(); @@ -41,7 +42,6 @@ public abstract class ClassChooser extends JComboBox { addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { - @SuppressWarnings("unchecked") Class selected = ((Element)getSelectedItem()).clazz; lastVal.put(selected, classSelected(selected, lastVal.get(selected))); }}); diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index b12815b..be9f10a 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -12,22 +12,17 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyVetoException; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Vector; -import javax.measure.quantity.Length; import javax.measure.unit.SI; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.DefaultComboBoxModel; -import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.JProgressBar; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JTextArea; @@ -48,7 +43,6 @@ import com.billkuker.rocketry.motorsim.Fuel; import com.billkuker.rocketry.motorsim.Grain; import com.billkuker.rocketry.motorsim.Motor; import com.billkuker.rocketry.motorsim.Nozzle; -import com.billkuker.rocketry.motorsim.RocketScience; import com.billkuker.rocketry.motorsim.cases.Schedule40; import com.billkuker.rocketry.motorsim.fuel.KNSU; import com.billkuker.rocketry.motorsim.grain.CSlot; @@ -106,43 +100,6 @@ public class MotorEditor extends JPanel implements PropertyChangeListener { chamberTypes.add(Schedule40.class); } - private abstract class Chooser extends JPanel { - private static final long serialVersionUID = 1L; - private List> types; - private Map, T> old = new HashMap, T>(); - - @SuppressWarnings("unchecked") - public Chooser(T initial, List> ts) { - types = ts; - if ( initial != null ) - old.put((Class)initial.getClass(), initial); - setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - for (final Class c : types) { - JButton b = new JButton(c.getSimpleName()); - add(b); - b.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - T val = old.get(c); - if ( val == null ){ - System.err.println("CREATED NEW ========================="); - val = c.newInstance(); - old.put(c, val); - } - choiceMade(val); - } catch (InstantiationException e1) { - e1.printStackTrace(); - } catch (IllegalAccessException e1) { - e1.printStackTrace(); - } - } - }); - } - } - - protected abstract void choiceMade(T o); - } - private class BurnTab extends JPanel { private static final long serialVersionUID = 1L; private Thread currentThread; @@ -216,12 +173,23 @@ public class MotorEditor extends JPanel implements PropertyChangeListener { p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); p.add(new Editor(g)); for (Grain gg : ((Grain.Composite) g).getGrains()) { - final int grainEditorIndex = p.getComponentCount() + 1; - p.add(new Chooser(gg, grainTypes) { + final int grainEditorIndex = p.getComponentCount() + 2; + p.add(new JLabel("Grain Type:")); + p.add(new ClassChooser(grainTypes, gg) { private static final long serialVersionUID = 1L; @Override - protected void choiceMade(Grain ng) { + protected Grain classSelected( + Class clazz, Grain ng) { + if ( ng == null ){ + try { + ng = clazz.newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } if (g instanceof MultiGrain) { ((MultiGrain) g).setGrain(ng); p.remove(grainEditorIndex); @@ -229,6 +197,8 @@ public class MotorEditor extends JPanel implements PropertyChangeListener { p.remove(0); p.add(new Editor(g), 0); } + return ng; + } }); p.add(new Editor(gg)); -- 2.30.2