1 package org.wcb.gui.forms.e6b;
2
3 import org.wcb.e6b.HeadingGroundspeed;
4 import org.wcb.e6b.E6bConverter;
5 import org.wcb.gui.forms.e6b.event.CalculateFormActionListener;
6
7 import javax.swing.*;
8 import java.awt.*;
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class HeadingGroundspeedPanel extends JPanel implements ICalculateForm{
38
39 private JTextField trueCourse;
40 private JTextField trueAirspeed;
41 private JTextField windSpeed;
42 private JTextField windDirection;
43 private JButton calculateButton;
44 private JButton clearButton;
45 private JTextField headingResults;
46 private JTextField groundspeedResults;
47 private JTextField wcaResults;
48
49 public HeadingGroundspeedPanel() {
50 setBorder(BorderFactory.createTitledBorder("Wind Correction Angle(Course)"));
51 initComponents();
52 }
53
54 public void clearForm() {
55 trueCourse.setText(null);
56 trueAirspeed.setText(null);
57 windSpeed.setText(null);
58 windDirection.setText(null);
59 }
60
61 private void initComponents() {
62 trueCourse = new JTextField(5);
63 trueAirspeed = new JTextField(5);
64 windSpeed = new JTextField(5);
65 windDirection = new JTextField(5);
66 calculateButton = new JButton("Calculate Course, GS and WCA");
67 clearButton = new JButton("Clear Course, GS and WCA Values");
68 headingResults = new JTextField(10);
69 groundspeedResults = new JTextField(10);
70 wcaResults = new JTextField(10);
71 calculateButton.addActionListener(new CalculateFormActionListener(this));
72 clearButton.addActionListener(new CalculateFormActionListener(this));
73
74
75 setLayout(new GridBagLayout());
76 GridBagConstraints gridBagConstraints;
77
78 gridBagConstraints = new GridBagConstraints();
79 gridBagConstraints.gridx = 0;
80 gridBagConstraints.gridy = 1;
81 gridBagConstraints.anchor = GridBagConstraints.WEST;
82 add(new JLabel("Course"), gridBagConstraints);
83
84 gridBagConstraints.gridx = 1;
85 gridBagConstraints.gridy = 1;
86 gridBagConstraints.anchor = GridBagConstraints.WEST;
87 add(trueCourse, gridBagConstraints);
88
89 gridBagConstraints.gridx = 0;
90 gridBagConstraints.gridy = 2;
91 gridBagConstraints.anchor = GridBagConstraints.WEST;
92 add(new JLabel("True Airspeed"), gridBagConstraints);
93
94 gridBagConstraints.gridx = 1;
95 gridBagConstraints.gridy = 2;
96 gridBagConstraints.anchor = GridBagConstraints.WEST;
97 add(trueAirspeed, gridBagConstraints);
98
99 gridBagConstraints.gridx = 0;
100 gridBagConstraints.gridy = 3;
101 gridBagConstraints.anchor = GridBagConstraints.WEST;
102 add(new JLabel("Wind Speed"), gridBagConstraints);
103
104 gridBagConstraints.gridx = 1;
105 gridBagConstraints.gridy = 3;
106 gridBagConstraints.anchor = GridBagConstraints.WEST;
107 add(windSpeed, gridBagConstraints);
108
109 gridBagConstraints.gridx = 0;
110 gridBagConstraints.gridy = 4;
111 gridBagConstraints.anchor = GridBagConstraints.WEST;
112 add(new JLabel("Wind Direction"), gridBagConstraints);
113
114 gridBagConstraints.gridx = 1;
115 gridBagConstraints.gridy = 4;
116 gridBagConstraints.anchor = GridBagConstraints.WEST;
117 add(windDirection, gridBagConstraints);
118
119
120 gridBagConstraints.gridx = 0;
121 gridBagConstraints.gridy = 5;
122 gridBagConstraints.gridwidth = 2;
123 gridBagConstraints.anchor = GridBagConstraints.WEST;
124 add(calculateButton, gridBagConstraints);
125
126 gridBagConstraints = new GridBagConstraints();
127 gridBagConstraints.gridx = 2;
128 gridBagConstraints.gridy = 5;
129 gridBagConstraints.anchor = GridBagConstraints.WEST;
130 add(clearButton, gridBagConstraints);
131
132 gridBagConstraints.gridx = 0;
133 gridBagConstraints.gridy = 6;
134 gridBagConstraints.gridwidth = 2;
135 gridBagConstraints.anchor = GridBagConstraints.WEST;
136 add(new JLabel("Calculated Heading="), gridBagConstraints);
137
138 gridBagConstraints = new GridBagConstraints();
139 gridBagConstraints.gridx = 2;
140 gridBagConstraints.gridy = 6;
141 gridBagConstraints.anchor = GridBagConstraints.WEST;
142 add(headingResults, gridBagConstraints);
143
144 gridBagConstraints.gridx = 0;
145 gridBagConstraints.gridy = 7;
146 gridBagConstraints.gridwidth = 2;
147 gridBagConstraints.anchor = GridBagConstraints.WEST;
148 add(new JLabel("Calculated Groundspeed="), gridBagConstraints);
149
150 gridBagConstraints = new GridBagConstraints();
151 gridBagConstraints.gridx = 2;
152 gridBagConstraints.gridy = 7;
153 gridBagConstraints.anchor = GridBagConstraints.WEST;
154 add(groundspeedResults, gridBagConstraints);
155
156 gridBagConstraints.gridx = 0;
157 gridBagConstraints.gridy = 8;
158 gridBagConstraints.gridwidth = 2;
159 gridBagConstraints.anchor = GridBagConstraints.WEST;
160 add(new JLabel("Wind correction angle="), gridBagConstraints);
161
162 gridBagConstraints = new GridBagConstraints();
163 gridBagConstraints.gridx = 2;
164 gridBagConstraints.gridy = 8;
165 gridBagConstraints.anchor = GridBagConstraints.WEST;
166 add(wcaResults, gridBagConstraints);
167 }
168
169 public Integer getTrueAirspeed() {
170 int returnValue;
171 try {
172 returnValue = Integer.parseInt(trueAirspeed.getText());
173 } catch (NumberFormatException nfe) {
174 returnValue = 0;
175 }
176 return returnValue;
177 }
178
179 public void setTrueAirspeed(int trueAirspeed) {
180 this.trueAirspeed.setText(trueAirspeed + "");
181 }
182
183 public Integer getWindSpeed() {
184 int returnValue;
185 try {
186 returnValue = Integer.parseInt(windSpeed.getText());
187 } catch (NumberFormatException nfe) {
188 returnValue = 0;
189 }
190 return returnValue;
191 }
192
193 public void setWindSpeed(int windSpeed) {
194 this.windSpeed.setText(windSpeed + "");
195 }
196
197 public Integer getTrueCourse() {
198 int returnValue;
199 try {
200 returnValue = Integer.parseInt(trueCourse.getText());
201 } catch (NumberFormatException nfe) {
202 returnValue = 0;
203 }
204 return returnValue;
205 }
206
207 public void setTrueCourse(double trueCourse) {
208 this.trueCourse.setText(trueCourse + "");
209 }
210
211 public Integer getWindDirection() {
212 int returnValue;
213 try {
214 returnValue = Integer.parseInt(windDirection.getText());
215 } catch (NumberFormatException nfe) {
216 returnValue = 0;
217 }
218 return returnValue;
219 }
220
221 public void setWindDirection(double trueCourse) {
222 this.windDirection.setText(trueCourse + "");
223 }
224
225 public void calculateResult() {
226 HeadingGroundspeed wind = new HeadingGroundspeed();
227 wind.setWindSpeed(this.getWindSpeed());
228 wind.setWindDirection(this.getWindDirection());
229 wind.setTrueCourse(this.getTrueCourse());
230 wind.setTrueAirspeed(this.getTrueAirspeed());
231 wind.calculate();
232 headingResults.setText(Math.abs(wind.getHeading()) + " degrees");
233 groundspeedResults.setText(Math.abs(wind.getGroundSpeed()) + " knots");
234 wcaResults.setText(E6bConverter.format(wind.getWindCorrectionAngle()) + " degrees");
235 }
236 }