Oops. I did need to removeAll when setting up the summary contents, so that changing...
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / SummaryPanel.java
index b78d2172eb91c43b0ffa72c7fd40bafd05cc41f4..20176330abb4b535d36cd4b7036f15cc573cc3ad 100644 (file)
@@ -16,13 +16,12 @@ import org.jscience.physics.amount.Amount;
 \r
 import com.billkuker.rocketry.motorsim.Burn;\r
 import com.billkuker.rocketry.motorsim.BurnSummary;\r
+import com.billkuker.rocketry.motorsim.Colors;\r
 import com.billkuker.rocketry.motorsim.RocketScience;\r
 \r
 public class SummaryPanel extends JPanel implements Burn.BurnProgressListener, RocketScience.UnitPreferenceListener {\r
        private static final long serialVersionUID = 1L;\r
-       private static final Color RED = new Color(196, 0, 0);\r
-       private static final Color GREEN = new Color(0, 196, 0);\r
-       private static final Color ORANGE = new Color(160, 96, 0);\r
+\r
        private final Burn burn;\r
        private final JProgressBar bar = new JProgressBar();\r
        private BurnSummary bs;\r
@@ -38,15 +37,21 @@ public class SummaryPanel extends JPanel implements Burn.BurnProgressListener, R
        }\r
 \r
        @Override\r
-       public void setProgress(float p) {\r
-               int pct = (int) (p * 100);\r
-               bar.setValue(pct);\r
-               Amount<Length> web = burn.getMotor().getGrain().webThickness();\r
-               Amount<Length> remaining = web.times(1.0 - p);\r
-               if ( remaining.isLessThan(Amount.valueOf(0, SI.MILLIMETER))){\r
-                       remaining = Amount.valueOf(0, remaining.getUnit());\r
-               }\r
-               bar.setString("Burn Progress: " + pct + "% (" + RocketScience.ammountToRoundedString(remaining) + " web thickness remaining)");\r
+       public void setProgress(final float p) {\r
+               SwingUtilities.invokeLater(new Thread() {\r
+                       public void run() {\r
+                               int pct = (int) (p * 100);\r
+                               bar.setValue(pct);\r
+                               Amount<Length> web = burn.getMotor().getGrain().webThickness();\r
+                               Amount<Length> remaining = web.times(1.0 - p);\r
+                               if (remaining.isLessThan(Amount.valueOf(0, SI.MILLIMETER))) {\r
+                                       remaining = Amount.valueOf(0, remaining.getUnit());\r
+                               }\r
+                               bar.setString("Burn Progress: " + pct + "% ("\r
+                                               + RocketScience.ammountToRoundedString(remaining)\r
+                                               + " web thickness remaining)");\r
+                       }\r
+               });\r
        }\r
 \r
        @Override\r
@@ -67,56 +72,58 @@ public class SummaryPanel extends JPanel implements Burn.BurnProgressListener, R
                        public void run() {\r
                                removeAll();\r
                                setLayout(new GridLayout(2, 5));\r
-                               SummaryPanel.this.add(new JLabel("Rating"));\r
-                               SummaryPanel.this.add(new JLabel("Total Impulse"));\r
-                               SummaryPanel.this.add(new JLabel("ISP"));\r
-                               SummaryPanel.this.add(new JLabel("Max Thrust"));\r
-                               SummaryPanel.this.add(new JLabel("Average Thust"));\r
-                               SummaryPanel.this.add(new JLabel("Max Pressure"));\r
-                               SummaryPanel.this.add(new JLabel("Fuel Mass"));\r
-                               SummaryPanel.this.add(new JLabel("Volume Loading"));\r
-                               SummaryPanel.this.add(new JLabel("Safty Factor"));\r
+                               add(new JLabel("Rating"));\r
+                               add(new JLabel("Total Impulse"));\r
+                               add(new JLabel("ISP"));\r
+                               add(new JLabel("Max Thrust"));\r
+                               add(new JLabel("Average Thust"));\r
+                               add(new JLabel("Max Pressure"));\r
+                               add(new JLabel("Fuel Mass"));\r
+                               add(new JLabel("Volume Loading"));\r
+                               add(new JLabel("Safty Factor"));\r
+\r
+                               add(new JLabel(bi.getRating()));\r
+                               add(new JLabel(RocketScience.ammountToRoundedString(bi\r
+                                               .totalImpulse())));\r
+                               add(new JLabel(RocketScience.ammountToRoundedString(bi\r
+                                               .specificImpulse())));\r
+                               add(new JLabel(RocketScience.ammountToRoundedString(bi\r
+                                               .maxThrust())));\r
+                               add(new JLabel(RocketScience.ammountToRoundedString(bi\r
+                                               .averageThrust())));\r
+                               add(new JLabel(RocketScience.ammountToRoundedString(bi\r
+                                               .maxPressure())));\r
+                               add(new JLabel(RocketScience.ammountToRoundedString(bi\r
+                                               .getPropellantMass())));\r
+                               add(new JLabel(\r
+                                               Integer.toString((int) (bi.getVolumeLoading() * 100.0))\r
+                                                               + "%"));\r
 \r
-                               SummaryPanel.this.add(new JLabel(bi.getRating()));\r
-                               SummaryPanel.this.add(new JLabel(RocketScience\r
-                                               .ammountToRoundedString(bi.totalImpulse())));\r
-                               SummaryPanel.this.add(new JLabel(RocketScience\r
-                                               .ammountToRoundedString(bi.specificImpulse())));\r
-                               SummaryPanel.this.add(new JLabel(RocketScience\r
-                                               .ammountToRoundedString(bi.maxThrust())));\r
-                               SummaryPanel.this.add(new JLabel(RocketScience\r
-                                               .ammountToRoundedString(bi.averageThrust())));\r
-                               SummaryPanel.this.add(new JLabel(RocketScience\r
-                                               .ammountToRoundedString(bi.maxPressure())));\r
-                               SummaryPanel.this.add(new JLabel(RocketScience\r
-                                               .ammountToRoundedString(bi.getPropellantMass())));\r
-                               SummaryPanel.this.add(new JLabel(Integer.toString((int)(bi.getVolumeLoading()*100.0)) + "%"));\r
-                               \r
                                Color saftyColor;\r
                                if (bi.getSaftyFactor() == null) {\r
 \r
                                        saftyColor = Color.BLACK;\r
-                                       SummaryPanel.this.add(new JLabel("NA"));\r
+                                       add(new JLabel("NA"));\r
                                } else {\r
                                        double d = bi.getSaftyFactor();\r
                                        if (d >= 1.5) {\r
-                                               saftyColor = GREEN;\r
+                                               saftyColor = Colors.GREEN;\r
                                        } else if (d > 1) {\r
-                                               saftyColor = ORANGE;\r
+                                               saftyColor = Colors.ORANGE;\r
                                        } else {\r
-                                               saftyColor = RED;\r
+                                               saftyColor = Colors.RED;\r
                                        }\r
                                        JLabel l = new JLabel(new DecimalFormat("##########.##")\r
                                                        .format(bi.getSaftyFactor()));\r
                                        l.setOpaque(true);\r
                                        l.setBackground(saftyColor);\r
                                        l.setForeground(Color.WHITE);\r
-                                       SummaryPanel.this.add(l);\r
+                                       add(l);\r
                                }\r
                                revalidate();\r
+                               repaint();\r
                        }\r
                });\r
        }\r
 \r
-\r
 }\r