import java.beans.PropertyChangeListener;\r
import java.beans.PropertyVetoException;\r
import java.io.IOException;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
import java.util.Vector;\r
\r
import javax.measure.quantity.Pressure;\r
private abstract class Chooser<T> extends JPanel {\r
private static final long serialVersionUID = 1L;\r
private Class<? extends T>[] types;\r
+ private Map<Class<? extends T>, T> old = new HashMap<Class<? extends T>, T>();\r
\r
- public Chooser(Class<? extends T>... ts) {\r
+ public Chooser(T initial, 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
b.addActionListener(new ActionListener() {\r
public void actionPerformed(ActionEvent e) {\r
try {\r
- choiceMade(c.newInstance());\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
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>(grainTypes) {\r
+ p.add(new Chooser<Grain>(gg, grainTypes) {\r
private static final long serialVersionUID = 1L;\r
\r
@Override\r
final JPanel p = new JPanel();\r
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));\r
\r
- p.add(new Chooser<Fuel>(fuelTypes) {\r
+ p.add(new Chooser<Fuel>(null, fuelTypes) {\r
private static final long serialVersionUID = 1L;\r
\r
@Override\r