1   package org.wcb.gui.forms.e6b;
2   
3   import org.wcb.e6b.Xhwind;
4   import org.wcb.gui.forms.e6b.event.CalculateFormActionListener;
5   
6   import javax.swing.*;
7   import java.awt.*;
8   
9   /**
10   * <small>
11   * <p/>
12   * Copyright (c)  2006  wbogaardt.
13   * This library is free software; you can redistribute it and/or
14   * modify it under the terms of the GNU Lesser General Public
15   * License as published by the Free Software Foundation; either
16   * version 2.1 of the License, or (at your option) any later version.
17   *
18   * This library is distributed in the hope that it will be useful,
19   * but WITHOUT ANY WARRANTY; without even the implied warranty of
20   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21   * Lesser General Public License for more details.
22   *
23   * You should have received a copy of the GNU Lesser General Public
24   * License along with this library; if not, write to the Free Software
25   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
26   * <p/>
27   * $File:  $ <br>
28   * $Change:  $ submitted by $Author: wbogaardt $ at $DateTime: Sep 18, 2006 10:29:36 AM $ <br>
29   * </small>
30   *
31   * @author wbogaardt
32   *         Display's unknown cross wind calculation fields.
33   */
34  
35  public class RunwayXWindPanel extends JPanel implements ICalculateForm{
36  
37      private JTextField windDirection;
38      private JTextField windSpeed;
39      private JTextField runwayDirection;
40      private JButton calculateButton;
41      private JButton clearButton;
42      private JTextField headWindResults;
43      private JTextField crossWindResults;
44  
45      public RunwayXWindPanel() {
46          setBorder(BorderFactory.createTitledBorder("Runway Crosswinds"));
47          initComponents();
48      }
49  
50      public void clearForm() {
51          windDirection.setText("");
52          windSpeed.setText("");
53          runwayDirection.setText(null);
54      }
55  
56      private void initComponents() {
57          windDirection = new JTextField(5);
58          windSpeed = new JTextField(5);
59          runwayDirection = new JTextField(5);
60  
61          calculateButton = new JButton("Calculate Crosswind");
62          clearButton = new JButton("Clear Crosswind Values");
63          headWindResults = new JTextField(20);
64          crossWindResults = new JTextField(20);
65          calculateButton.addActionListener(new CalculateFormActionListener(this));
66          clearButton.addActionListener(new CalculateFormActionListener(this));
67  
68          setLayout(new GridBagLayout());
69          GridBagConstraints gridBagConstraints;
70  
71          gridBagConstraints = new GridBagConstraints();
72          gridBagConstraints.gridx = 0;
73          gridBagConstraints.gridy = 1;
74          gridBagConstraints.anchor = GridBagConstraints.WEST;
75          add(new JLabel("Wind (from) Compass Direction"), gridBagConstraints);
76  
77          gridBagConstraints = new GridBagConstraints();
78          gridBagConstraints.gridx = 1;
79          gridBagConstraints.gridy = 1;
80          gridBagConstraints.anchor = GridBagConstraints.WEST;
81          add(windDirection, gridBagConstraints);
82  
83          gridBagConstraints = new GridBagConstraints();
84          gridBagConstraints.gridx = 0;
85          gridBagConstraints.gridy = 2;
86          gridBagConstraints.anchor = GridBagConstraints.WEST;
87          add(new JLabel("Wind Speed"), gridBagConstraints);
88  
89          gridBagConstraints = new GridBagConstraints();
90          gridBagConstraints.gridx = 1;
91          gridBagConstraints.gridy = 2;
92          gridBagConstraints.anchor = GridBagConstraints.WEST;
93          add(windSpeed, gridBagConstraints);
94  
95          gridBagConstraints = new GridBagConstraints();
96          gridBagConstraints.gridx = 0;
97          gridBagConstraints.gridy = 3;
98          gridBagConstraints.anchor = GridBagConstraints.WEST;
99          add(new JLabel("Runway Heading"), gridBagConstraints);
100 
101         gridBagConstraints = new GridBagConstraints();
102         gridBagConstraints.gridx = 1;
103         gridBagConstraints.gridy = 3;
104         gridBagConstraints.anchor = GridBagConstraints.WEST;
105         add(runwayDirection, gridBagConstraints);
106 
107         //standard calculate and reset buttons
108         gridBagConstraints = new GridBagConstraints();
109         gridBagConstraints.gridx = 0;
110         gridBagConstraints.gridy = 4;
111         gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
112         gridBagConstraints.anchor = GridBagConstraints.WEST;
113         add(calculateButton, gridBagConstraints);
114 
115         gridBagConstraints = new GridBagConstraints();
116         gridBagConstraints.gridx = 1;
117         gridBagConstraints.gridy = 4;
118         gridBagConstraints.anchor = GridBagConstraints.WEST;
119         add(clearButton, gridBagConstraints);
120 
121         gridBagConstraints = new GridBagConstraints();
122         gridBagConstraints.gridx = 0;
123         gridBagConstraints.gridy = 5;
124         gridBagConstraints.anchor = GridBagConstraints.WEST;
125         add(new JLabel("Calculated Headwind="), gridBagConstraints);
126 
127         gridBagConstraints = new GridBagConstraints();
128         gridBagConstraints.gridx = 1;
129         gridBagConstraints.gridy = 5;
130         gridBagConstraints.anchor = GridBagConstraints.WEST;
131         add(headWindResults, gridBagConstraints);
132 
133         gridBagConstraints = new GridBagConstraints();
134         gridBagConstraints.gridx = 0;
135         gridBagConstraints.gridy = 6;
136         gridBagConstraints.anchor = GridBagConstraints.WEST;
137         add(new JLabel("Calculated Crosswind="), gridBagConstraints);
138 
139         gridBagConstraints = new GridBagConstraints();
140         gridBagConstraints.gridx = 1;
141         gridBagConstraints.gridy = 6;
142         gridBagConstraints.anchor = GridBagConstraints.WEST;
143         add(crossWindResults, gridBagConstraints);
144     }
145 
146     public Integer getWindSpeed() {
147         int returnValue;
148         try {
149             returnValue = Integer.parseInt(windSpeed.getText());
150         } catch (NumberFormatException nfe) {
151             returnValue = 0;
152         }
153         return returnValue;
154     }
155 
156     public void setWindSpeed(int windSpeed) {
157         this.windSpeed.setText(windSpeed + "");
158     }
159 
160     public Integer getRunwayDirection() {
161         int returnValue;
162         try {
163             returnValue = Integer.parseInt(runwayDirection.getText());
164         } catch (NumberFormatException nfe) {
165             returnValue = 0;
166         }
167         return returnValue;
168     }
169 
170     public void setRunwayDirection(int runwayDirection) {
171         this.runwayDirection.setText(runwayDirection + "");
172     }
173 
174     public Integer getWindDirection() {
175         int returnValue;
176         try {
177             returnValue = Integer.parseInt(windDirection.getText());
178         } catch (NumberFormatException nfe) {
179             returnValue = 0;
180         }
181         return returnValue;
182     }
183 
184     public void setWindDirection(double windDirection) {
185         this.windDirection.setText(windDirection + "");
186     }
187 
188     public void calculateResult() {
189         Xhwind wind = new Xhwind();
190         wind.setRunwayDirection(this.getRunwayDirection());
191         wind.setWindDirection(this.getWindDirection());
192         wind.setWindSpeed(this.getWindSpeed());
193         wind.calculate();
194         headWindResults.setText(Math.abs(wind.getHeadwindResult()) + " knots from a "+ wind.getHeadwindDirection());
195         crossWindResults.setText(Math.abs(wind.getCrosswindResult()) + " knots from the " + wind.getCrossWindDirection());
196     }
197 }