/Users/johnr/Dropbox/johnrayworth.info/largeFilesOutsideJSR/__IB-Other/Other/IA-Solutions-2019/Alex/Product/BeachPicker/src/com/hyltonboy/beachpicker/GUI.java
  1 /*
  2  * To change this license header, choose License Headers in Project Properties.
  3  * To change this template file, choose Tools | Templates
  4  * and open the template in the editor.
  5  */
  6 package com.hyltonboy.beachpicker;
  7 
  8 import com.hyltonboy.beachpicker.place.Place;
  9 import com.hyltonboy.beachpicker.util.Sort;
 10 import java.awt.Color;
 11 import java.awt.Component;
 12 import java.io.BufferedReader;
 13 import java.io.IOException;
 14 import java.io.InputStream;
 15 import java.io.InputStreamReader;
 16 import java.io.UnsupportedEncodingException;
 17 import java.net.InetSocketAddress;
 18 import java.net.MalformedURLException;
 19 import java.net.Socket;
 20 import java.net.URL;
 21 import java.net.URLEncoder;
 22 import java.util.ArrayList;
 23 import java.util.List;
 24 import java.util.logging.Level;
 25 import java.util.logging.Logger;
 26 import javax.swing.JOptionPane;
 27 import javax.swing.table.DefaultTableModel;
 28 import org.json.JSONArray;
 29 import org.json.JSONObject;
 30 
 31 /**
 32  *
 33  * @author 18719
 34  */
 35 public class GUI extends javax.swing.JFrame {
 36 
 37     private double LONGITUDE_LIMIT = 180.0;
 38     private double LATITUDE_LIMIT = 90.0;
 39     
 40     private boolean hasInternet = false;
 41     
 42     private JSONArray jsonResults = null;
 43     
 44     private String weatherAPIBase = "api.openweathermap.org/data/2.5/weather?";
 45     private String weatherAPIKey = "&APPID=82769701a4e9cff3cc5cad5e8a0ca0e2";
 46     private double locationLat;
 47     private double locationLon;
 48     private ArrayList<Place> places = new ArrayList<Place>();
 49     private Place[] placesArray;
 50 
 51     /**
 52      * Creates new form GUI
 53      */
 54     public GUI() {
 55         initComponents();
 56         hasInternetConnection();
 57         System.out.println(hasInternet);
 58     }
 59 
 
264 
265     private void verifyLocationBMouseReleased(java.awt.event.MouseEvent evt) {                                              
266         boolean success = false;
267         // Check which pane is active, and decide where to grab user input from accordingly
268         Component selectedComponent = locationSourceTP.getSelectedComponent();
269         if(selectedComponent == coordinatesP) {
270             // Check user input against database
271             success = verifyCoordinates(longitudeTB.getText(), latitudeTB.getText());
272         } else if(selectedComponent == addressP) {
273             // Check user input against OSM API
274             success = verifyAddress(addressTB.getText());
275         }
276         
277         // Notify user of result
278         if(success) {
279             JOptionPane.showMessageDialog(this, "The location was successfully verified!","Success", JOptionPane.PLAIN_MESSAGE);
280         } else {
281             JOptionPane.showMessageDialog(this, "The location could not be verified; please check your input and internet connection!","Failure", JOptionPane.PLAIN_MESSAGE);
282         }
283     }                                             
284 
285     private void longitudeTBActionPerformed(java.awt.event.ActionEvent evt) {                                            
286         // TODO add your handling code here:
287     }                                           
288 
289     /**
290      * @param args the command line arguments
291      */
292     public static void main(String args[]) {
293         /* Set the Nimbus look and feel */
294         //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
295         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
296          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
297          */
298         try {
299             for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
300                 if ("System".equals(info.getName())) {
301                     javax.swing.UIManager.setLookAndFeel(info.getClassName());
302                     break;
303                 }
304             }
305         } catch (ClassNotFoundException ex) {
306             java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
307         } catch (InstantiationException ex) {
308             java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
309         } catch (IllegalAccessException ex) {
310             java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
311         } catch (javax.swing.UnsupportedLookAndFeelException ex) {
312             java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
313         }
314         //</editor-fold>
315 
316         /* Create and display the form */
317         java.awt.EventQueue.invokeLater(new Runnable() {
318             public void run() {
319                 new GUI().setVisible(true);
320             }
321         });
322     }
323 
324     // Variables declaration - do not modify                     
325     private javax.swing.JLabel addressL;
326     private javax.swing.JPanel addressP;
327     private javax.swing.JTextField addressTB;
328     private javax.swing.JPanel coordinatesP;
329     private javax.swing.JPanel initP;
330     private javax.swing.JLabel latitudeL;
331     private javax.swing.JTextField latitudeTB;
332     private javax.swing.JLabel locationSourceL;
333     private javax.swing.JLabel locationSourceL1;
334     private javax.swing.JTabbedPane locationSourceTP;
335     private javax.swing.JLabel longitudeL;
336     private javax.swing.JTextField longitudeTB;
337     private javax.swing.JTabbedPane mainTP;
338     private javax.swing.JPanel resultsP;
339     private javax.swing.JScrollPane resultsSP;
340     private javax.swing.JTable resultsT;
341     private javax.swing.JLabel statusL;
342     private javax.swing.JButton verifyLocationB;
343     // End of variables declaration                   
344 
345     private boolean verifyCoordinates(String longitudeString, String latitudeString) {
346         if(hasInternetConnection()) {
347         // Catch values
348         double longitude = -999;
349         double latitude = -999;
350         try {
351             longitude = Double.parseDouble(longitudeString);
352             latitude = Double.parseDouble(latitudeString);
353         } catch (NumberFormatException e) {
354             return false;
355         }
356         
357         JSONArray queryJSON = null;
358         
359         // Check if the coordinates are withing the range of real latitudes and longitudes
360         if (longitude >= -LONGITUDE_LIMIT && longitude <= LONGITUDE_LIMIT && latitude >= -LATITUDE_LIMIT && latitude <= LATITUDE_LIMIT) {
361             queryJSON = queryOSM(latitude, longitude);
362         }
363         if(queryJSON == null) {
364                 return false;
365             } else {
366                 jsonResults = queryJSON;
367                 JSONObject j = (JSONObject) jsonResults.get(0);
368                 double lat = Double.parseDouble((String) j.get("lat"));
369                 double lon = Double.parseDouble((String) j.get("lon"));
370                 //JSONArray weatherResults = queryOWM("lat=" + lat + "&lon=" + lon);
371                 parseResults(jsonResults, null/*weatherResults*/);
372                 return (queryJSON.length() > 0);
373             }
374         } else {
375             return false;
376         }
377     }
378 
379     private boolean verifyAddress(String address) {
380         if(hasInternetConnection()) {
381             JSONArray queryJSON = queryOSM(address);
382             if(queryJSON == null || queryJSON.isEmpty()|| queryJSON.isNull(0)) {
383                 return false;
384             } else {
385                 jsonResults = queryJSON;
386                 
387                 JSONObject j = (JSONObject) jsonResults.get(0);
388                 JSONObject addressObject = j.getJSONObject("address");
389                 String country = addressObject.getString("country");
390                 String state = addressObject.getString("state");
391                 JSONArray nearbyBeaches = null;
392                 if(state != "") {
393                     nearbyBeaches = queryOSM("beach near " + state + ", " + country);
394                 }
395                 locationLat = Double.parseDouble((String) j.get("lat"));
396                 locationLon = Double.parseDouble((String) j.get("lon"));
397                 //JSONArray weatherResults = queryOWM("lat=" + lat + "&lon=" + lon);
398                 parseResults(nearbyBeaches, null/*weatherResults*/);
399                 return (queryJSON.length() > 0);
400             }
401         }
402         return false;
403     }
404     
405     private JSONArray queryOWM(String query) {
406         try {
407             StringBuilder queryURL = new StringBuilder();
408             queryURL.append(weatherAPIBase);
409             queryURL.append(URLEncoder.encode(query, "UTF-8").replaceAll("\\+", "%20"));
410             queryURL.append(weatherAPIKey);
411             URL url = new URL(queryURL.toString());
412             System.out.println(queryURL.toString());
413             InputStream urlStream = url.openConnection().getInputStream();
414             BufferedReader urlReader = new BufferedReader(new InputStreamReader(urlStream));
415             StringBuilder jsonString = new StringBuilder();
416             String currentLine;
417             while((currentLine = urlReader.readLine()) != null)  {
418                 jsonString.append(currentLine);
419             }
420             urlReader.close();
421             System.out.println(jsonString.toString());
422             JSONArray jsonArray = new JSONArray(jsonString.toString());
423             return jsonArray;
424         } catch (MalformedURLException ex) {
425             //Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
426             return null;
427         } catch (IOException ex) {
428             //Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
429             return null;
430         }
431     }
432 
433     private JSONArray queryOSM(String address) {
434         try {
435             StringBuilder queryURL = new StringBuilder();
436             queryURL.append("https://nominatim.openstreetmap.org/search/");
437             queryURL.append(URLEncoder.encode(address, "UTF-8").replaceAll("\\+", "%20"));
438             queryURL.append("?format=json&addressdetails=1");
439             
440             URL url = new URL(queryURL.toString());
441             System.out.println(queryURL.toString());
442             InputStream urlStream = url.openConnection().getInputStream();
443             BufferedReader urlReader = new BufferedReader(new InputStreamReader(urlStream));
444             StringBuilder jsonString = new StringBuilder();
445             String currentLine;
446             while((currentLine = urlReader.readLine()) != null)  {
447                 jsonString.append(currentLine);
448             }
449             urlReader.close();
450             System.out.println(jsonString.toString());
451             JSONArray jsonArray = new JSONArray(jsonString.toString());
452             return jsonArray;
453         } catch (MalformedURLException ex) {
454             //Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
455             return null;
456         } catch (IOException ex) {
457             //Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
458             return null;
459         }
460     }
461     
462     private double degToRad(double degrees) {
463         return degrees * Math.PI / 180;
464     }
465 
466     private double distanceCoords(double lat1, double lon1, double lat2, double lon2) {
467   double radius = 6371;
468 
469   double lat = degToRad(lat2-lat1);
470   double lon = degToRad(lon2-lon1);
471 
472   lat1 = degToRad(lat1);
473   lat2 = degToRad(lat2);
474 
475   double a = Math.sin(lat/2) * Math.sin(lat/2) + Math.sin(lon/2) * Math.sin(lon/2) * Math.cos(lat1) * Math.cos(lat2); 
476   double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
477   return radius * c;
478 }
479     
480     private JSONArray queryOSM(double latitude, double longitude) {
481         try {
482             StringBuilder queryURL = new StringBuilder();
483             queryURL.append("https://nominatim.openstreetmap.org/reverse?");
484             queryURL.append("format=json&addressdetails=1");
485             queryURL.append("&lat=");
486             queryURL.append(latitude);
487             queryURL.append("&lon=");
488             queryURL.append(longitude);
489             queryURL.append("?format=json&addressdetails=1");
490             
491             URL url = new URL(queryURL.toString());
492             System.out.println(queryURL.toString());
493             InputStream urlStream = url.openConnection().getInputStream();
494             BufferedReader urlReader = new BufferedReader(new InputStreamReader(urlStream));
495             StringBuilder jsonString = new StringBuilder();
496             String currentLine;
497             while((currentLine = urlReader.readLine()) != null)  {
498                 jsonString.append(currentLine);
499             }
500             urlReader.close();
501             System.out.println(jsonString.toString());
502             JSONArray jsonArray = new JSONArray(jsonString.toString());
503             return jsonArray;
504         } catch (MalformedURLException ex) {
505             //Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
506             return null;
507         } catch (IOException ex) {
508             //Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
509             return null;
510         }
511     }
512 
513     private boolean hasInternetConnection() {
514         boolean connection = false;
515         try {
516             String address = "google.com";
517             int port = 80;
518             int timeout = 1000;
519             Socket socket = new Socket();
520             socket.connect(new InetSocketAddress(address, port), timeout);
521             // Connected to internet
522             statusL.setText("Connected to the internet! All features should work!");
523             statusL.setForeground(Color.GREEN.darker());
524             connection = true;
525         } catch (IOException ex) {
526             // Could not connect to internet
527             statusL.setText("No internet connection. Some features will only work with internet!");
528             statusL.setForeground(Color.RED.darker());
529             connection = false;
530         }
531         hasInternet = connection;
532         return connection;
533     }
534 
535     private void parseResults(JSONArray jsonArray, JSONArray weatherArray) {
536         DefaultTableModel model = (DefaultTableModel) resultsT.getModel();
537         model.setRowCount(jsonArray.length());
538         
539         for(int i = 0; i < jsonArray.length(); i++) {
540             
541             
542             JSONObject jsonObject = (JSONObject) jsonArray.get(i);
543             String displayName = (String) jsonObject.get("display_name");
544             double lat = Double.parseDouble((String) jsonObject.get("lat"));
545             double lon = Double.parseDouble((String) jsonObject.get("lon"));
546             double dist = distanceCoords(lat, lon, locationLat, locationLon);
547             
548             String hotelLink = "";
549             String mapsLink = "";
550             try {
551                 mapsLink = "http://maps.google.com/maps?q=" + URLEncoder.encode(displayName, "UTF-8");
552                 hotelLink = "https://www.expedia.com/Hotel-Search?destination=" + URLEncoder.encode(displayName, "UTF-8") + "&startDate=&endDate=&rooms=1&adults=2";
553             } catch (UnsupportedEncodingException ex) {
554                 Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
555             }
556             
557             Place place = new Place((String) jsonObject.get("display_name"), lat, lon, hotelLink, mapsLink, dist);
558             places.add(place);
559             
560             
561             //JSONObject weatherResults = queryOWM("lat=" + lat + "&lon=" + lon).getJSONObject(0);
562             //JSONObject firstWeather = weatherResults.getJSONObject("");
563             
564             /*
565             JSONObject weatherObject = (JSONObject) weatherArray.get(0);
566             JSONObject weather = (JSONObject) weatherObject.get("weather");
567             resultsT.setValueAt(weather.get("main"), i, 2);
568             */
569             
570             
571             
572             
573             
574             //resultsT.setValueAt(hotelLink, i, 2);
575             //resultsT.setValueAt(mapsLink, i, 3);
576             
577             //resultsT.setValueAt(displayName, i, 0);
578             
579             
580             
581             
582             //resultsT.setValueAt((int)distanceCoords(lat, lon, locationLat, locationLon), i, 1);// Distance
583         }
584         /*
585         Object o[] = places.toArray();
586         placesArray = new Place[o.length];
587         for (int i = 0; i < placesArray.length-1; i++) {
588             placesArray[i] = (Place) o[i];
589         }
590         
591         placesArray = Sort.selectionSort(placesArray);
592         */
593          for(int i = 0; i < places.size(); i++) {
594              resultsT.setValueAt(places.get(i).getInfoLink(), i, 2);
595             resultsT.setValueAt(places.get(i).getMapLink(), i, 3);
596             resultsT.setValueAt(places.get(i).getDistance(), i, 1);
597             resultsT.setValueAt(places.get(i).getPlaceName(), i, 0);
598          }
599     }
600 
601 }
602 



/*
####################################################################
####################################################################
####################################################################
####################################################################
####################################################################

*************** NOTE THAT ALL THE CODE WHICH IS ********************
*************** HIGHLIGHTED GREY BLOCK IS AUTO- ********************
*************** GENERATED FROM NETBEANS, NOT BY ********************
*************** ME. (It's mainly the GUI stuff.)********************

####################################################################
####################################################################
####################################################################
####################################################################
####################################################################
*/ 60 /** 61 * This method is called from within the constructor to initialize the form. 62 * WARNING: Do NOT modify this code. The content of this method is always 63 * regenerated by the Form Editor. 64 */ 65 @SuppressWarnings("unchecked") 66 // <editor-fold defaultstate="collapsed" desc="Generated Code"> 67 private void initComponents() { 68 69 mainTP = new javax.swing.JTabbedPane(); 70 initP = new javax.swing.JPanel(); 71 locationSourceL = new javax.swing.JLabel(); 72 locationSourceTP = new javax.swing.JTabbedPane(); 73 coordinatesP = new javax.swing.JPanel(); 74 longitudeL = new javax.swing.JLabel(); 75 latitudeL = new javax.swing.JLabel(); 76 longitudeTB = new javax.swing.JTextField(); 77 latitudeTB = new javax.swing.JTextField(); 78 addressP = new javax.swing.JPanel(); 79 addressL = new javax.swing.JLabel(); 80 addressTB = new javax.swing.JTextField(); 81 verifyLocationB = new javax.swing.JButton(); 82 locationSourceL1 = new javax.swing.JLabel(); 83 resultsP = new javax.swing.JPanel(); 84 resultsSP = new javax.swing.JScrollPane(); 85 resultsT = new javax.swing.JTable(); 86 statusL = new javax.swing.JLabel(); 87 88 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 89 setTitle("Beach Picker v0.1.0"); 90 setResizable(false); 91 92 locationSourceL.setText("How would you like to choose your desired location?"); 93 94 longitudeL.setText("Longitude"); 95 96 latitudeL.setText("Latitude"); 97 98 longitudeTB.setToolTipText(""); 99 longitudeTB.addActionListener(new java.awt.event.ActionListener() { 100 public void actionPerformed(java.awt.event.ActionEvent evt) { 101 longitudeTBActionPerformed(evt); 102 } 103 }); 104 105 javax.swing.GroupLayout coordinatesPLayout = new javax.swing.GroupLayout(coordinatesP); 106 coordinatesP.setLayout(coordinatesPLayout); 107 coordinatesPLayout.setHorizontalGroup( 108 coordinatesPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 109 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, coordinatesPLayout.createSequentialGroup() 110 .addContainerGap(128, Short.MAX_VALUE) 111 .addGroup(coordinatesPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 112 .addComponent(latitudeL) 113 .addComponent(longitudeL)) 114 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 115 .addGroup(coordinatesPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 116 .addComponent(latitudeTB) 117 .addComponent(longitudeTB, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)) 118 .addGap(117, 117, 117)) 119 ); 120 coordinatesPLayout.setVerticalGroup( 121 coordinatesPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 122 .addGroup(coordinatesPLayout.createSequentialGroup() 123 .addGroup(coordinatesPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 124 .addComponent(longitudeL) 125 .addComponent(longitudeTB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 126 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 127 .addGroup(coordinatesPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 128 .addComponent(latitudeL) 129 .addComponent(latitudeTB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 130 .addGap(0, 4, Short.MAX_VALUE)) 131 ); 132 133 locationSourceTP.addTab("Coordinates", coordinatesP); 134 135 addressL.setText("Type the address or place name below"); 136 137 javax.swing.GroupLayout addressPLayout = new javax.swing.GroupLayout(addressP); 138 addressP.setLayout(addressPLayout); 139 addressPLayout.setHorizontalGroup( 140 addressPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 141 .addGroup(addressPLayout.createSequentialGroup() 142 .addContainerGap() 143 .addComponent(addressTB) 144 .addContainerGap()) 145 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addressPLayout.createSequentialGroup() 146 .addContainerGap(77, Short.MAX_VALUE) 147 .addComponent(addressL) 148 .addGap(87, 87, 87)) 149 ); 150 addressPLayout.setVerticalGroup( 151 addressPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 152 .addGroup(addressPLayout.createSequentialGroup() 153 .addContainerGap() 154 .addComponent(addressL) 155 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 156 .addComponent(addressTB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 157 .addContainerGap(8, Short.MAX_VALUE)) 158 ); 159 160 locationSourceTP.addTab("Address", addressP); 161 162 verifyLocationB.setText("Search"); 163 verifyLocationB.addMouseListener(new java.awt.event.MouseAdapter() { 164 public void mouseReleased(java.awt.event.MouseEvent evt) { 165 verifyLocationBMouseReleased(evt); 166 } 167 }); 168 169 locationSourceL1.setText("This address should be your current location."); 170 171 javax.swing.GroupLayout initPLayout = new javax.swing.GroupLayout(initP); 172 initP.setLayout(initPLayout); 173 initPLayout.setHorizontalGroup( 174 initPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 175 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, initPLayout.createSequentialGroup() 176 .addGap(0, 0, Short.MAX_VALUE) 177 .addGroup(initPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 178 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, initPLayout.createSequentialGroup() 179 .addComponent(locationSourceL, javax.swing.GroupLayout.PREFERRED_SIZE, 341, javax.swing.GroupLayout.PREFERRED_SIZE) 180 .addGap(189, 189, 189)) 181 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, initPLayout.createSequentialGroup() 182 .addComponent(locationSourceL1) 183 .addGap(213, 213, 213)))) 184 .addGroup(initPLayout.createSequentialGroup() 185 .addGroup(initPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 186 .addGroup(initPLayout.createSequentialGroup() 187 .addGap(282, 282, 282) 188 .addComponent(verifyLocationB)) 189 .addGroup(initPLayout.createSequentialGroup() 190 .addGap(138, 138, 138) 191 .addComponent(locationSourceTP, javax.swing.GroupLayout.PREFERRED_SIZE, 425, javax.swing.GroupLayout.PREFERRED_SIZE))) 192 .addContainerGap(151, Short.MAX_VALUE)) 193 ); 194 initPLayout.setVerticalGroup( 195 initPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 196 .addGroup(initPLayout.createSequentialGroup() 197 .addContainerGap() 198 .addComponent(locationSourceL) 199 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 200 .addComponent(locationSourceL1) 201 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 202 .addComponent(locationSourceTP, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE) 203 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 204 .addComponent(verifyLocationB) 205 .addContainerGap(355, Short.MAX_VALUE)) 206 ); 207 208 mainTP.addTab("Initialize", initP); 209 210 resultsT.setModel(new javax.swing.table.DefaultTableModel( 211 new Object [][] { 212 {null, null, null, null}, 213 {null, null, null, null}, 214 {null, null, null, null}, 215 {null, null, null, null} 216 }, 217 new String [] { 218 "Address", "Distance", "Hotel Listings", "Google Maps" 219 } 220 )); 221 resultsSP.setViewportView(resultsT); 222 223 javax.swing.GroupLayout resultsPLayout = new javax.swing.GroupLayout(resultsP); 224 resultsP.setLayout(resultsPLayout); 225 resultsPLayout.setHorizontalGroup( 226 resultsPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 227 .addGroup(resultsPLayout.createSequentialGroup() 228 .addContainerGap() 229 .addComponent(resultsSP, javax.swing.GroupLayout.DEFAULT_SIZE, 702, Short.MAX_VALUE) 230 .addContainerGap()) 231 ); 232 resultsPLayout.setVerticalGroup( 233 resultsPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 234 .addGroup(resultsPLayout.createSequentialGroup() 235 .addContainerGap() 236 .addComponent(resultsSP, javax.swing.GroupLayout.PREFERRED_SIZE, 496, javax.swing.GroupLayout.PREFERRED_SIZE) 237 .addContainerGap(52, Short.MAX_VALUE)) 238 ); 239 240 mainTP.addTab("Results", resultsP); 241 242 statusL.setForeground(new java.awt.Color(255, 102, 102)); 243 statusL.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 244 statusL.setVerticalAlignment(javax.swing.SwingConstants.TOP); 245 246 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 247 getContentPane().setLayout(layout); 248 layout.setHorizontalGroup( 249 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 250 .addComponent(mainTP) 251 .addComponent(statusL, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 252 ); 253 layout.setVerticalGroup( 254 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 255 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 256 .addContainerGap() 257 .addComponent(mainTP, javax.swing.GroupLayout.PREFERRED_SIZE, 600, javax.swing.GroupLayout.PREFERRED_SIZE) 258 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 259 .addComponent(statusL, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) 260 ); 261 262 pack(); 263 }// </editor-fold>