+ \r
+ l = new JLabel("Casing:");\r
+ l.setAlignmentX(LEFT_ALIGNMENT);\r
+ nameAndFuel.add(l);\r
+ \r
+ nameAndFuel.add(new ClassChooser<Chamber>(chamberTypes, motor.getChamber()) {\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ setAlignmentX(LEFT_ALIGNMENT);\r
+ setMinimumSize(new Dimension(200, 20));\r
+ setMaximumSize(new Dimension(Short.MAX_VALUE, 20));\r
+ }\r
+ @Override\r
+ protected Chamber classSelected(Class<? extends Chamber> clazz, Chamber c) {\r
+ try {\r
+ if ( c != null ){\r
+ motor.setChamber(c);\r
+ } else {\r
+ motor.setChamber(clazz.newInstance());\r
+ }\r
+ return motor.getChamber();\r
+ } catch (InstantiationException e) {\r
+ log.error(e);\r
+ } catch (IllegalAccessException e) {\r
+ log.error(e);\r
+ }\r
+ return null;\r
+ }\r
+ });\r
+ \r
+ \r
+ \r
+ \r
+ l = new JLabel("Delay:");\r
+ l.setAlignmentX(LEFT_ALIGNMENT);\r
+ nameAndFuel.add(l);\r
+ nameAndFuel.add(new JTextField(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND))) {\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ setAlignmentX(LEFT_ALIGNMENT);\r
+ setMinimumSize(new Dimension(200, 20));\r
+ setMaximumSize(new Dimension(Short.MAX_VALUE, 20));\r
+ final JTextField t = this;\r
+ addFocusListener(new FocusListener() {\r
+\r
+ @Override\r
+ public void focusLost(FocusEvent e) {\r
+ try {\r
+ String n = t.getText();\r
+ double d = Double.parseDouble(n);\r
+ Amount<Duration> delay = Amount.valueOf(d, SI.SECOND);\r
+ if ( delay != motor.getEjectionDelay() ){\r
+ motor.setEjectionDelay(delay);\r
+ }\r
+ } catch ( Exception ex ){\r
+ log.warn(e);\r
+ setText(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND)));\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void focusGained(FocusEvent e) {\r
+\r
+ }\r
+ });\r
+\r
+ }\r
+ });\r
+ \r
+ \r
+ \r