\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
}\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
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("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
- \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