Renamed show() to showAsWindow() because show() is actually in Component. Oops
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / visual / NozzlePanel.java
1 package com.billkuker.rocketry.motorsim.visual;\r
2 \r
3 import java.awt.BasicStroke;\r
4 import java.awt.Color;\r
5 import java.awt.Graphics;\r
6 import java.awt.Graphics2D;\r
7 import java.awt.Rectangle;\r
8 import java.awt.Shape;\r
9 import java.beans.PropertyChangeEvent;\r
10 import java.beans.PropertyChangeListener;\r
11 \r
12 import javax.measure.unit.SI;\r
13 import javax.swing.JFrame;\r
14 import javax.swing.JPanel;\r
15 import javax.swing.WindowConstants;\r
16 \r
17 import org.jscience.physics.amount.Amount;\r
18 \r
19 import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
20 import com.billkuker.rocketry.motorsim.MotorPart;\r
21 import com.billkuker.rocketry.motorsim.Nozzle;\r
22 \r
23 public class NozzlePanel extends JPanel {\r
24         private static final long serialVersionUID = 1L;\r
25         private Nozzle nozzle;\r
26         public NozzlePanel(Nozzle n){\r
27                 nozzle = n;\r
28                 \r
29                 if ( n instanceof MotorPart ){\r
30                         ((MotorPart)n).addPropertyChangeListener(new PropertyChangeListener(){\r
31                                 @Override\r
32                                 public void propertyChange(PropertyChangeEvent evt) {\r
33                                         repaint();\r
34                                 }\r
35                         });\r
36                 }\r
37         }\r
38         \r
39         public void paint(Graphics g){\r
40                 super.paint(g);\r
41                 Graphics2D g2d = (Graphics2D)g;\r
42                 g2d.translate(10, 10);\r
43 \r
44                 g2d.setColor(Color.black);\r
45                 \r
46                 \r
47                 Shape a = nozzle.nozzleShape(Amount.valueOf(30, SI.MILLIMETER));\r
48                 \r
49                 Rectangle bounds = a.getBounds();\r
50                 double max = bounds.getWidth();\r
51                 if ( bounds.getHeight() > max )\r
52                         max = bounds.getHeight();\r
53                 \r
54                 g2d.scale(200 / max, 200 / max);\r
55                 g2d.translate(-bounds.getX(), -bounds.getY());\r
56                 \r
57                 g2d.setStroke(new BasicStroke(4*(float)max/200f));\r
58                 \r
59                 g2d.draw( a );\r
60         }\r
61         \r
62         public void showAsWindow(){\r
63                 JFrame f = new JFrame();\r
64                 f.setSize(220,250);\r
65                 f.setContentPane(this);\r
66                 f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);\r
67                 f.setVisible(true);\r
68         }\r
69         \r
70         public static void main(String args[]) throws Exception{\r
71                 ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
72                 n.setThroatDiameter(Amount.valueOf(5, SI.MILLIMETER));\r
73                 n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
74                 new Editor(n).show();\r
75                 new NozzlePanel(n).show();\r
76         }\r
77 }\r