Warning: Can't use blame annotator:
svn blame failed on trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.java: ("Can't find a temporary directory: Internal error", 20014)

source: tmcsimulator/trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.java @ 237

Revision 237, 54.7 KB checked in by jtorres, 8 years ago (diff)

Added new package atmsdriver.batchbuilder. Includes BatchBuilderGUI, TimeFrame?, TimeFrames?, and TrafficLaneEvent? classes. Added some auxillary methods to Highways.java, Highway.java, and Station.java.

RevLine 
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 */
6package atmsdriver.batchbuilder;
7
8import atmsdriver.model.Highway;
9import atmsdriver.model.LoopDetector;
10import atmsdriver.model.LoopDetector.DOTCOLOR;
11import atmsdriver.model.Station;
12import java.util.ArrayList;
13import java.util.Enumeration;
14import java.util.Observable;
15import java.util.Observer;
16import javax.swing.AbstractButton;
17import javax.swing.AbstractListModel;
18import javax.swing.ButtonGroup;
19import javax.swing.DefaultListSelectionModel;
20import javax.swing.JComboBox;
21import javax.swing.JList;
22import javax.swing.JOptionPane;
23import javax.swing.JTable;
24import javax.swing.JTextField;
25import javax.swing.ListSelectionModel;
26import javax.swing.event.ListSelectionEvent;
27import javax.swing.event.ListSelectionListener;
28import javax.swing.table.AbstractTableModel;
29
30/**
31 *
32 * @author jtorres
33 */
34public class BatchBuilderGUI extends javax.swing.JFrame implements Observer
35{
36   
37    TimeFrames timeFrames;
38   
39    /**
40     * Creates new form BatchBuilderGUI
41     */
42    public BatchBuilderGUI(TimeFrames timeFrames)
43    {
44        initComponents();
45        this.timeFrames = timeFrames;
46       
47        HighwayList.setModel(new HighwaysListModel());
48        HighwayList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
49        HighwayList.addListSelectionListener(new HighwaysListSelectionListener());
50       
51        StationTable.setModel(new StationTableModel());
52        StationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
53        StationTable.getSelectionModel().addListSelectionListener(
54                new StationTableListSelectionListener());
55       
56        TimeFrameList.setModel(new TimeFrameListModel());
57        TimeFrameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
58        TimeFrameList.addListSelectionListener(new TimeFrameListSelectionListener());
59       
60        LoopDetectorTable.setModel(new LoopDetectorTableModel());
61        LoopDetectorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
62        LoopDetectorTable.getSelectionModel().addListSelectionListener(
63                new LoopDetectorTableListSelectionListener());
64       
65        TrafficLaneEventsTable.setModel(new TrafficLaneEventsTableModel());
66        TrafficLaneEventsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
67        TrafficLaneEventsTable.getSelectionModel().addListSelectionListener(
68                new TrafficLaneEventsTableSelectionListener());
69       
70        GreenButton.setSelected(true);
71    }
72   
73    private class TrafficLaneEventsTableModel extends AbstractTableModel
74    {
75        String[] columnNames = {"Route", "StationID", "Postmile", "LoopID", "LoopType", 
76            "LoopDesc", "Color"};
77        int rows;
78        int cols;
79        String[][] data;
80        TimeFrame currFrame;
81        public TrafficLaneEventsTableModel()
82        {           
83            currFrame = timeFrames.currentTimeFrame;
84            rows = currFrame != null ? currFrame.events.size() : 0;
85            cols = columnNames.length;
86            data = new String[rows][cols];
87            for(int i = 0; i < rows; i++)
88            {
89                TrafficLaneEvent currEvent = currFrame.events.get(i);
90                data[i][0] = Integer.toString(currEvent.routeNum);
91                data[i][1] = Integer.toString(currEvent.station.ldsID);
92                data[i][2] = Double.toString(currEvent.station.postmile);
93                data[i][3] = Integer.toString(currEvent.loopDetector.loopID);
94                data[i][4] = currEvent.loopDetector.loopLocationID;
95                data[i][5] = currEvent.loopDetector.loopLocation;
96                data[i][6] = currEvent.color.getLetter();
97            }
98        }
99       
100        @Override
101        public String getColumnName(int col)
102        {
103            return columnNames[col];
104        }
105       
106        @Override
107        public int getRowCount()
108        {
109            return rows;
110        }
111
112        @Override
113        public int getColumnCount()
114        {
115            return cols;
116        }
117
118        @Override
119        public Object getValueAt(int rowIndex, int columnIndex)
120        {
121            return data[rowIndex][columnIndex];
122        }
123       
124    }
125   
126    private class LoopDetectorTableModel extends AbstractTableModel
127    {
128        String[] columnnames = {"Loop_ID", "Loop_Type", "Loop_Desc"};
129        int rows;
130        int cols;
131        String[][] data;
132        Station currStn;
133       
134        public LoopDetectorTableModel()
135        {
136            currStn = timeFrames.currentStation;
137            rows = currStn != null ? currStn.loops.size() : 0;
138            cols = columnnames.length;
139            data = new String[rows][cols];
140            for(int i = 0; i < rows; i++)
141            {
142                data[i][0] = Integer.toString(currStn.loops.get(i).loopID);
143                data[i][1] = currStn.loops.get(i).loopLocationID;
144                data[i][2] = currStn.loops.get(i).loopLocation;
145            }
146        }
147       
148        @Override
149        public String getColumnName(int col)
150        {
151            return columnnames[col];
152        }
153       
154        @Override
155        public int getRowCount()
156        {
157            return rows;
158        }
159
160        @Override
161        public int getColumnCount()
162        {
163            return cols;
164        }
165
166        @Override
167        public Object getValueAt(int rowIndex, int columnIndex)
168        {
169            return data[rowIndex][columnIndex];
170        }
171       
172    }
173   
174    private class TimeFrameListModel extends AbstractListModel
175    {
176        ArrayList<TimeFrame> frames;
177       
178        public TimeFrameListModel()
179        {
180            frames = (ArrayList<TimeFrame>) timeFrames.frames;
181        }
182
183        @Override
184        public int getSize()
185        {
186            return frames.size();
187        }
188
189        @Override
190        public Object getElementAt(int index)
191        {
192            return frames.get(index);
193        }
194       
195    }
196
197    private class TrafficLaneEventsTableSelectionListener implements ListSelectionListener
198    {
199        @Override
200        public void valueChanged(ListSelectionEvent e)
201        {
202            if(e.getValueIsAdjusting())
203                return;
204            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
205            int index = mod.getMaxSelectionIndex();
206            if(index >= 0)
207                timeFrames.setCurrentTrafficLaneEvent(index);
208        }
209    }
210   
211    private class HighwaysListSelectionListener implements ListSelectionListener
212    {
213        @Override
214        public void valueChanged(ListSelectionEvent e)
215        {
216            if(e.getValueIsAdjusting())
217                return;
218            JList source = (JList) e.getSource();
219            timeFrames.setCurrentHighway(source.getSelectedIndex());
220        }
221    }
222   
223    private class TimeFrameListSelectionListener implements ListSelectionListener
224    {
225        @Override
226        public void valueChanged(ListSelectionEvent e)
227        {
228            if(e.getValueIsAdjusting())
229                return;
230            JList source = (JList) e.getSource();
231            int index = source.getSelectedIndex();
232            if(index >= 0)
233            {
234                timeFrames.setCurrentTimeFrame(index);
235            }
236        }
237    }
238   
239    private class StationTableListSelectionListener implements ListSelectionListener
240    {
241
242        @Override
243        public void valueChanged(ListSelectionEvent e)
244        {
245            if(e.getValueIsAdjusting())
246                return;
247            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
248            int index = mod.getMaxSelectionIndex();
249            if(index >= 0)
250                timeFrames.setCurrentStation(index);
251        }
252    }
253   
254    private class LoopDetectorTableListSelectionListener implements ListSelectionListener
255    {
256
257        @Override
258        public void valueChanged(ListSelectionEvent e)
259        {
260            if(e.getValueIsAdjusting())
261                return;
262            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
263            int index = mod.getMaxSelectionIndex();
264            if(index >= 0)
265                timeFrames.setCurrentLoopDetector(index);
266        }
267       
268    }
269   
270    private class StationTableModel extends AbstractTableModel
271    {
272        String[] columnNames = {"lds_id", "postmile", "location"};
273        String[][] data;
274        Highway hwy;
275        int rows;
276        int cols;
277       
278        public StationTableModel()
279        {
280            hwy = BatchBuilderGUI.this.timeFrames.currentHighway;
281            cols = 3;
282            rows = hwy != null ? hwy.stations.size() : 0;
283            data = new String[rows][cols];
284            for(int i = 0; i < rows; i++)
285            {
286                data[i][0] = Integer.toString(hwy.stations.get(i).ldsID);
287                data[i][1] = Double.toString(hwy.stations.get(i).postmile);
288                data[i][2] = hwy.stations.get(i).location;
289            }
290        }
291       
292        @Override
293        public String getColumnName(int col)
294        {
295            return columnNames[col];
296        }
297
298        @Override
299        public int getRowCount()
300        {
301            return rows;
302        }
303
304        @Override
305        public int getColumnCount()
306        {
307            return cols;
308        }
309
310        @Override
311        public Object getValueAt(int rowIndex, int columnIndex)
312        {
313            return data[rowIndex][columnIndex];
314        }
315    }
316   
317    private class HighwaysListModel extends AbstractListModel
318    {
319       
320        @Override
321        public int getSize()
322        {
323            return BatchBuilderGUI.this.timeFrames.highways.highways.size();
324        }
325
326        @Override
327        public Object getElementAt(int index)
328        {
329            return BatchBuilderGUI.this.timeFrames.highways.highways.get(index);
330        }
331    }
332
333    /**
334     * This method is called from within the constructor to initialize the form.
335     * WARNING: Do NOT modify this code. The content of this method is always
336     * regenerated by the Form Editor.
337     */
338    @SuppressWarnings("unchecked")
339    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
340    private void initComponents()
341    {
342
343        colorRadioButtons = new javax.swing.ButtonGroup();
344        jPanel6 = new javax.swing.JPanel();
345        jPanel3 = new javax.swing.JPanel();
346        TimeFrameScrollPane = new javax.swing.JScrollPane();
347        TimeFrameList = new javax.swing.JList();
348        jPanel10 = new javax.swing.JPanel();
349        AddNewTimeFrameButton = new javax.swing.JButton();
350        DeleteTimeFrameButton = new javax.swing.JButton();
351        jPanel2 = new javax.swing.JPanel();
352        HighwayScrollPane = new javax.swing.JScrollPane();
353        HighwayList = new javax.swing.JList();
354        jPanel4 = new javax.swing.JPanel();
355        StationScrollPane = new javax.swing.JScrollPane();
356        StationTable = new javax.swing.JTable();
357        jPanel5 = new javax.swing.JPanel();
358        LoopDetectorScrollPane = new javax.swing.JScrollPane();
359        LoopDetectorTable = new javax.swing.JTable();
360        jPanel8 = new javax.swing.JPanel();
361        jScrollPane1 = new javax.swing.JScrollPane();
362        TrafficLaneEventsTable = new javax.swing.JTable();
363        jPanel1 = new javax.swing.JPanel();
364        jPanel9 = new javax.swing.JPanel();
365        jLabel1 = new javax.swing.JLabel();
366        CurrentTimeFrameLabel = new javax.swing.JLabel();
367        CurrentHighwayLabel = new javax.swing.JLabel();
368        jLabel2 = new javax.swing.JLabel();
369        jLabel3 = new javax.swing.JLabel();
370        CurrentStationLabel = new javax.swing.JLabel();
371        CurrentStationPostmileLabel = new javax.swing.JLabel();
372        jLabel4 = new javax.swing.JLabel();
373        jLabel5 = new javax.swing.JLabel();
374        CurrentStationLocationLabel = new javax.swing.JLabel();
375        CurrentLoopDetectorLabel = new javax.swing.JLabel();
376        jLabel6 = new javax.swing.JLabel();
377        jLabel7 = new javax.swing.JLabel();
378        CurrentLoopDetectorTypeLabel = new javax.swing.JLabel();
379        CurrentLoopDetectorDescLabel = new javax.swing.JLabel();
380        jLabel8 = new javax.swing.JLabel();
381        jPanel7 = new javax.swing.JPanel();
382        GreenButton = new javax.swing.JRadioButton();
383        YellowButton = new javax.swing.JRadioButton();
384        RedButton = new javax.swing.JRadioButton();
385        AddNewEventButton = new javax.swing.JButton();
386        DeleteEventButton = new javax.swing.JButton();
387        jPanel11 = new javax.swing.JPanel();
388        jPanel12 = new javax.swing.JPanel();
389        SinglePreviewStationButton = new javax.swing.JButton();
390        SinglePreviewHighwaysButton = new javax.swing.JButton();
391        jPanel13 = new javax.swing.JPanel();
392        CumulativePreviewStationButton = new javax.swing.JButton();
393        CumulativePreviewHighwaysButton = new javax.swing.JButton();
394        jPanel14 = new javax.swing.JPanel();
395        jButton1 = new javax.swing.JButton();
396        jButton2 = new javax.swing.JButton();
397        jButton3 = new javax.swing.JButton();
398
399        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
400
401        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Time Frame"));
402
403        TimeFrameList.setModel(new javax.swing.AbstractListModel()
404        {
405            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
406            public int getSize() { return strings.length; }
407            public Object getElementAt(int i) { return strings[i]; }
408        });
409        TimeFrameScrollPane.setViewportView(TimeFrameList);
410
411        jPanel10.setBorder(javax.swing.BorderFactory.createEtchedBorder());
412
413        AddNewTimeFrameButton.setText("Add");
414        AddNewTimeFrameButton.setActionCommand("addTimeFrame");
415        AddNewTimeFrameButton.addActionListener(new java.awt.event.ActionListener()
416        {
417            public void actionPerformed(java.awt.event.ActionEvent evt)
418            {
419                addNewTimeFrameButtonClicked(evt);
420            }
421        });
422
423        DeleteTimeFrameButton.setText("Delete");
424        DeleteTimeFrameButton.addActionListener(new java.awt.event.ActionListener()
425        {
426            public void actionPerformed(java.awt.event.ActionEvent evt)
427            {
428                DeleteTimeFrameButtonActionPerformed(evt);
429            }
430        });
431
432        javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
433        jPanel10.setLayout(jPanel10Layout);
434        jPanel10Layout.setHorizontalGroup(
435            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
436            .addGroup(jPanel10Layout.createSequentialGroup()
437                .addContainerGap()
438                .addComponent(AddNewTimeFrameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)
439                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
440                .addComponent(DeleteTimeFrameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
441                .addContainerGap())
442        );
443        jPanel10Layout.setVerticalGroup(
444            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
445            .addGroup(jPanel10Layout.createSequentialGroup()
446                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
447                .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
448                    .addComponent(AddNewTimeFrameButton)
449                    .addComponent(DeleteTimeFrameButton))
450                .addContainerGap())
451        );
452
453        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
454        jPanel3.setLayout(jPanel3Layout);
455        jPanel3Layout.setHorizontalGroup(
456            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
457            .addComponent(TimeFrameScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
458            .addComponent(jPanel10, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
459        );
460        jPanel3Layout.setVerticalGroup(
461            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
462            .addGroup(jPanel3Layout.createSequentialGroup()
463                .addComponent(TimeFrameScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)
464                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
465                .addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
466        );
467
468        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Highway"));
469
470        HighwayList.setModel(new javax.swing.AbstractListModel()
471        {
472            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
473            public int getSize() { return strings.length; }
474            public Object getElementAt(int i) { return strings[i]; }
475        });
476        HighwayScrollPane.setViewportView(HighwayList);
477
478        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
479        jPanel2.setLayout(jPanel2Layout);
480        jPanel2Layout.setHorizontalGroup(
481            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
482            .addComponent(HighwayScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
483        );
484        jPanel2Layout.setVerticalGroup(
485            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
486            .addComponent(HighwayScrollPane)
487        );
488
489        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Station"));
490
491        StationTable.setModel(new javax.swing.table.DefaultTableModel(
492            new Object [][]
493            {
494                {null, null, null, null},
495                {null, null, null, null},
496                {null, null, null, null},
497                {null, null, null, null}
498            },
499            new String []
500            {
501                "Title 1", "Title 2", "Title 3", "Title 4"
502            }
503        ));
504        StationScrollPane.setViewportView(StationTable);
505
506        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
507        jPanel4.setLayout(jPanel4Layout);
508        jPanel4Layout.setHorizontalGroup(
509            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
510            .addComponent(StationScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)
511        );
512        jPanel4Layout.setVerticalGroup(
513            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
514            .addComponent(StationScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
515        );
516
517        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Loop Detector"));
518
519        LoopDetectorTable.setModel(new javax.swing.table.DefaultTableModel(
520            new Object [][]
521            {
522                {null, null, null, null},
523                {null, null, null, null},
524                {null, null, null, null},
525                {null, null, null, null}
526            },
527            new String []
528            {
529                "Title 1", "Title 2", "Title 3", "Title 4"
530            }
531        ));
532        LoopDetectorScrollPane.setViewportView(LoopDetectorTable);
533
534        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
535        jPanel5.setLayout(jPanel5Layout);
536        jPanel5Layout.setHorizontalGroup(
537            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
538            .addComponent(LoopDetectorScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE)
539        );
540        jPanel5Layout.setVerticalGroup(
541            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
542            .addComponent(LoopDetectorScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
543        );
544
545        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
546        jPanel6.setLayout(jPanel6Layout);
547        jPanel6Layout.setHorizontalGroup(
548            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
549            .addGroup(jPanel6Layout.createSequentialGroup()
550                .addContainerGap()
551                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
552                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
553                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
554                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
555                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
556                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
557                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
558                .addContainerGap())
559        );
560        jPanel6Layout.setVerticalGroup(
561            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
562            .addGroup(jPanel6Layout.createSequentialGroup()
563                .addContainerGap()
564                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
565                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
566                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
567                    .addGroup(jPanel6Layout.createSequentialGroup()
568                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
569                        .addGap(0, 0, Short.MAX_VALUE))
570                    .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
571        );
572
573        jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Traffic Lane Events"));
574
575        TrafficLaneEventsTable.setModel(new javax.swing.table.DefaultTableModel(
576            new Object [][]
577            {
578                {null, null, null, null},
579                {null, null, null, null},
580                {null, null, null, null},
581                {null, null, null, null}
582            },
583            new String []
584            {
585                "Title 1", "Title 2", "Title 3", "Title 4"
586            }
587        ));
588        jScrollPane1.setViewportView(TrafficLaneEventsTable);
589
590        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
591        jPanel8.setLayout(jPanel8Layout);
592        jPanel8Layout.setHorizontalGroup(
593            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
594            .addComponent(jScrollPane1)
595        );
596        jPanel8Layout.setVerticalGroup(
597            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
598            .addGroup(jPanel8Layout.createSequentialGroup()
599                .addContainerGap()
600                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 201, Short.MAX_VALUE)
601                .addContainerGap())
602        );
603
604        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Current Selection"));
605        jPanel1.setLayout(new java.awt.GridLayout(1, 0));
606
607        jLabel1.setText("TimeFrame:");
608
609        CurrentTimeFrameLabel.setText("null");
610
611        CurrentHighwayLabel.setText("null");
612
613        jLabel2.setText("Highway:");
614
615        jLabel3.setText("Station:");
616
617        CurrentStationLabel.setText("null");
618
619        CurrentStationPostmileLabel.setText("null");
620
621        jLabel4.setText("Postmile:");
622
623        jLabel5.setText("Location:");
624
625        CurrentStationLocationLabel.setText("null");
626
627        CurrentLoopDetectorLabel.setText("null");
628
629        jLabel6.setText("Loop:");
630
631        jLabel7.setText("Type:");
632
633        CurrentLoopDetectorTypeLabel.setText("null");
634
635        CurrentLoopDetectorDescLabel.setText("null");
636
637        jLabel8.setText("Desc:");
638
639        javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
640        jPanel9.setLayout(jPanel9Layout);
641        jPanel9Layout.setHorizontalGroup(
642            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
643            .addGroup(jPanel9Layout.createSequentialGroup()
644                .addContainerGap()
645                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
646                    .addComponent(jLabel1)
647                    .addComponent(jLabel2)
648                    .addComponent(jLabel3)
649                    .addComponent(jLabel6)
650                    .addGroup(jPanel9Layout.createSequentialGroup()
651                        .addGap(6, 6, 6)
652                        .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
653                            .addComponent(jLabel5)
654                            .addComponent(jLabel4)
655                            .addComponent(jLabel7)))
656                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel9Layout.createSequentialGroup()
657                        .addComponent(jLabel8)
658                        .addGap(33, 33, 33)))
659                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
660                    .addComponent(CurrentLoopDetectorDescLabel)
661                    .addComponent(CurrentLoopDetectorTypeLabel)
662                    .addComponent(CurrentLoopDetectorLabel)
663                    .addComponent(CurrentStationPostmileLabel)
664                    .addComponent(CurrentStationLabel)
665                    .addComponent(CurrentHighwayLabel)
666                    .addComponent(CurrentTimeFrameLabel)
667                    .addComponent(CurrentStationLocationLabel))
668                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
669        );
670        jPanel9Layout.setVerticalGroup(
671            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
672            .addGroup(jPanel9Layout.createSequentialGroup()
673                .addContainerGap()
674                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
675                    .addComponent(jLabel1)
676                    .addComponent(CurrentTimeFrameLabel))
677                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
678                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
679                    .addComponent(jLabel2)
680                    .addComponent(CurrentHighwayLabel))
681                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
682                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
683                    .addComponent(jLabel3)
684                    .addComponent(CurrentStationLabel))
685                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
686                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
687                    .addComponent(jLabel4)
688                    .addComponent(CurrentStationPostmileLabel))
689                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
690                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
691                    .addComponent(jLabel5)
692                    .addComponent(CurrentStationLocationLabel))
693                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
694                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
695                    .addComponent(jLabel6)
696                    .addComponent(CurrentLoopDetectorLabel))
697                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
698                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
699                    .addComponent(jLabel7)
700                    .addComponent(CurrentLoopDetectorTypeLabel))
701                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
702                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
703                    .addComponent(jLabel8)
704                    .addComponent(CurrentLoopDetectorDescLabel))
705                .addContainerGap(31, Short.MAX_VALUE))
706        );
707
708        jPanel1.add(jPanel9);
709
710        jPanel7.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
711
712        colorRadioButtons.add(GreenButton);
713        GreenButton.setText("Green");
714
715        colorRadioButtons.add(YellowButton);
716        YellowButton.setText("Yellow");
717
718        colorRadioButtons.add(RedButton);
719        RedButton.setText("Red");
720
721        AddNewEventButton.setText("Add Event");
722        AddNewEventButton.addActionListener(new java.awt.event.ActionListener()
723        {
724            public void actionPerformed(java.awt.event.ActionEvent evt)
725            {
726                AddLaneEventButtonActionPerformed(evt);
727            }
728        });
729
730        DeleteEventButton.setText("Delete Event");
731        DeleteEventButton.addActionListener(new java.awt.event.ActionListener()
732        {
733            public void actionPerformed(java.awt.event.ActionEvent evt)
734            {
735                DeleteEventButtonActonPerformed(evt);
736            }
737        });
738
739        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
740        jPanel7.setLayout(jPanel7Layout);
741        jPanel7Layout.setHorizontalGroup(
742            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
743            .addGroup(jPanel7Layout.createSequentialGroup()
744                .addContainerGap()
745                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
746                    .addComponent(DeleteEventButton, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE)
747                    .addGroup(jPanel7Layout.createSequentialGroup()
748                        .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
749                            .addComponent(RedButton)
750                            .addComponent(YellowButton)
751                            .addComponent(GreenButton))
752                        .addGap(0, 0, Short.MAX_VALUE))
753                    .addComponent(AddNewEventButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
754                .addContainerGap())
755        );
756        jPanel7Layout.setVerticalGroup(
757            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
758            .addGroup(jPanel7Layout.createSequentialGroup()
759                .addContainerGap()
760                .addComponent(GreenButton)
761                .addGap(12, 12, 12)
762                .addComponent(YellowButton)
763                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
764                .addComponent(RedButton)
765                .addGap(18, 18, 18)
766                .addComponent(AddNewEventButton)
767                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
768                .addComponent(DeleteEventButton)
769                .addContainerGap(22, Short.MAX_VALUE))
770        );
771
772        jPanel1.add(jPanel7);
773
774        jPanel11.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Preview and Import/Export Panel"));
775
776        jPanel12.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Frame Preview"));
777
778        SinglePreviewStationButton.setText("Preview Station");
779        SinglePreviewStationButton.addActionListener(new java.awt.event.ActionListener()
780        {
781            public void actionPerformed(java.awt.event.ActionEvent evt)
782            {
783                SinglePreviewStationButtonActionPerformed(evt);
784            }
785        });
786
787        SinglePreviewHighwaysButton.setText("Preview Highways");
788        SinglePreviewHighwaysButton.addActionListener(new java.awt.event.ActionListener()
789        {
790            public void actionPerformed(java.awt.event.ActionEvent evt)
791            {
792                SinglePreviewHighwaysButtonActionPerformed(evt);
793            }
794        });
795
796        javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12);
797        jPanel12.setLayout(jPanel12Layout);
798        jPanel12Layout.setHorizontalGroup(
799            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
800            .addGroup(jPanel12Layout.createSequentialGroup()
801                .addContainerGap()
802                .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
803                    .addComponent(SinglePreviewHighwaysButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
804                    .addComponent(SinglePreviewStationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
805                .addContainerGap(15, Short.MAX_VALUE))
806        );
807        jPanel12Layout.setVerticalGroup(
808            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
809            .addGroup(jPanel12Layout.createSequentialGroup()
810                .addContainerGap()
811                .addComponent(SinglePreviewStationButton)
812                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
813                .addComponent(SinglePreviewHighwaysButton)
814                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
815        );
816
817        jPanel13.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Cumulative Preview"));
818
819        CumulativePreviewStationButton.setText("Preview Station");
820
821        CumulativePreviewHighwaysButton.setText("Preview Highways");
822
823        javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
824        jPanel13.setLayout(jPanel13Layout);
825        jPanel13Layout.setHorizontalGroup(
826            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
827            .addGroup(jPanel13Layout.createSequentialGroup()
828                .addContainerGap()
829                .addGroup(jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
830                    .addComponent(CumulativePreviewHighwaysButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
831                    .addComponent(CumulativePreviewStationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
832                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
833        );
834        jPanel13Layout.setVerticalGroup(
835            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
836            .addGroup(jPanel13Layout.createSequentialGroup()
837                .addContainerGap()
838                .addComponent(CumulativePreviewStationButton)
839                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
840                .addComponent(CumulativePreviewHighwaysButton)
841                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
842        );
843
844        jPanel14.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Export/Import Scripts"));
845
846        jButton1.setText("Load Script");
847
848        jButton2.setText("Save Script");
849
850        jButton3.setText("Save Script As");
851
852        javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14);
853        jPanel14.setLayout(jPanel14Layout);
854        jPanel14Layout.setHorizontalGroup(
855            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
856            .addGroup(jPanel14Layout.createSequentialGroup()
857                .addContainerGap()
858                .addGroup(jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
859                    .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
860                    .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
861                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
862                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
863        );
864        jPanel14Layout.setVerticalGroup(
865            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
866            .addGroup(jPanel14Layout.createSequentialGroup()
867                .addContainerGap()
868                .addComponent(jButton1)
869                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
870                .addComponent(jButton2)
871                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
872                .addComponent(jButton3)
873                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
874        );
875
876        javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11);
877        jPanel11.setLayout(jPanel11Layout);
878        jPanel11Layout.setHorizontalGroup(
879            jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
880            .addGroup(jPanel11Layout.createSequentialGroup()
881                .addContainerGap()
882                .addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
883                .addGap(18, 18, 18)
884                .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
885                .addGap(18, 18, 18)
886                .addComponent(jPanel14, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
887                .addContainerGap())
888        );
889        jPanel11Layout.setVerticalGroup(
890            jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
891            .addGroup(jPanel11Layout.createSequentialGroup()
892                .addContainerGap()
893                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
894                    .addComponent(jPanel13, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
895                    .addComponent(jPanel12, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
896                    .addComponent(jPanel14, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
897                .addContainerGap())
898        );
899
900        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
901        getContentPane().setLayout(layout);
902        layout.setHorizontalGroup(
903            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
904            .addGroup(layout.createSequentialGroup()
905                .addGap(12, 12, 12)
906                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
907                    .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
908                    .addGroup(layout.createSequentialGroup()
909                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
910                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
911                        .addComponent(jPanel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
912                .addContainerGap())
913            .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
914        );
915        layout.setVerticalGroup(
916            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
917            .addGroup(layout.createSequentialGroup()
918                .addContainerGap()
919                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
920                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
921                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
922                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
923                    .addComponent(jPanel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
924                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
925                .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
926                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
927        );
928
929        pack();
930    }// </editor-fold>//GEN-END:initComponents
931
932    private void AddLaneEventButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_AddLaneEventButtonActionPerformed
933    {//GEN-HEADEREND:event_AddLaneEventButtonActionPerformed
934        timeFrames.addEventToTimeFrame(getDotColorFromText(
935                getSelectedButtonText(colorRadioButtons)));
936    }//GEN-LAST:event_AddLaneEventButtonActionPerformed
937
938    private void DeleteTimeFrameButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_DeleteTimeFrameButtonActionPerformed
939    {//GEN-HEADEREND:event_DeleteTimeFrameButtonActionPerformed
940        timeFrames.deleteTimeFrame(TimeFrameList.getSelectedIndex());
941    }//GEN-LAST:event_DeleteTimeFrameButtonActionPerformed
942
943    private String[] getTimeChoices()
944    {
945        String[] choices = new String[60];
946        for(int i = 0; i < 60; i++)
947        {
948            choices[i] = String.format("%02d", i);
949        }
950        return choices;
951    }
952   
953    private void addNewTimeFrameButtonClicked(java.awt.event.ActionEvent evt)//GEN-FIRST:event_addNewTimeFrameButtonClicked
954    {//GEN-HEADEREND:event_addNewTimeFrameButtonClicked
955        // String name = JOptionPane.showInputDialog(this, "Enter a time frame (HH:MM:SS)");
956        String[] hourChoices = getTimeChoices();
957        String[] minChoices = getTimeChoices();
958        String[] secChoices = {"00", "30"};
959       
960        JComboBox hourCombo = new JComboBox(hourChoices);
961        JComboBox minCombo = new JComboBox(minChoices);
962        JComboBox secCombo = new JComboBox(secChoices);
963       
964        Object[] message = {
965            "Hour:", hourCombo,
966            "Minute:", minCombo,
967            "Second:", secCombo
968        };
969        int option = JOptionPane.showConfirmDialog(this, message, "Enter a time frame:", JOptionPane.OK_CANCEL_OPTION);
970        if(option == JOptionPane.OK_OPTION)
971        {
972            String h = hourCombo.getSelectedItem().toString();
973            String m = minCombo.getSelectedItem().toString();
974            String s = secCombo.getSelectedItem().toString();
975            String cum = h + ":" + m + ":" + s;
976            timeFrames.addTimeFrame(cum);
977        }
978        /*if(name != null)
979        {
980            timeFrames.addTimeFrame(name);
981        }*/
982    }//GEN-LAST:event_addNewTimeFrameButtonClicked
983
984    private void DeleteEventButtonActonPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_DeleteEventButtonActonPerformed
985    {//GEN-HEADEREND:event_DeleteEventButtonActonPerformed
986        timeFrames.deleteTrafficLaneEvent(TrafficLaneEventsTable
987                .getSelectionModel().getMaxSelectionIndex());
988    }//GEN-LAST:event_DeleteEventButtonActonPerformed
989
990    private void SinglePreviewStationButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_SinglePreviewStationButtonActionPerformed
991    {//GEN-HEADEREND:event_SinglePreviewStationButtonActionPerformed
992        timeFrames.singlePreviewStation();
993    }//GEN-LAST:event_SinglePreviewStationButtonActionPerformed
994
995    private void SinglePreviewHighwaysButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_SinglePreviewHighwaysButtonActionPerformed
996    {//GEN-HEADEREND:event_SinglePreviewHighwaysButtonActionPerformed
997        timeFrames.singlePreviewHighways();
998    }//GEN-LAST:event_SinglePreviewHighwaysButtonActionPerformed
999
1000    private DOTCOLOR getDotColorFromText(String text)
1001    {
1002        return DOTCOLOR.toDotColor(text);
1003    }
1004   
1005    private String getSelectedButtonText(ButtonGroup buttonGroup)
1006    {
1007        for(Enumeration<AbstractButton> buttons = buttonGroup.getElements(); buttons.hasMoreElements();)
1008        {
1009            AbstractButton button = buttons.nextElement();
1010            if(button.isSelected())
1011            {
1012                return button.getText();
1013            }
1014        }
1015        return null;
1016    }
1017   
1018    /**
1019     * @param args the command line arguments
1020     */
1021    public static void main(String args[])
1022    {
1023        /* Set the Nimbus look and feel */
1024        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
1025        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
1026         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
1027         */
1028        try
1029        {
1030            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
1031            {
1032                if ("Nimbus".equals(info.getName()))
1033                {
1034                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
1035                    break;
1036                }
1037            }
1038        } catch (ClassNotFoundException ex)
1039        {
1040            java.util.logging.Logger.getLogger(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1041        } catch (InstantiationException ex)
1042        {
1043            java.util.logging.Logger.getLogger(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1044        } catch (IllegalAccessException ex)
1045        {
1046            java.util.logging.Logger.getLogger(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1047        } catch (javax.swing.UnsupportedLookAndFeelException ex)
1048        {
1049            java.util.logging.Logger.getLogger(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1050        }
1051        //</editor-fold>
1052       
1053        TimeFrames timeFrames = new TimeFrames();
1054        final BatchBuilderGUI gui = new BatchBuilderGUI(timeFrames);
1055        timeFrames.addObserver(gui);
1056       
1057        /* Create and display the form */
1058        java.awt.EventQueue.invokeLater(new Runnable()
1059        {
1060            public void run()
1061            {
1062                gui.update(null, null);
1063                gui.setVisible(true);
1064            }
1065        });
1066    }
1067
1068    // Variables declaration - do not modify//GEN-BEGIN:variables
1069    private javax.swing.JButton AddNewEventButton;
1070    private javax.swing.JButton AddNewTimeFrameButton;
1071    private javax.swing.JButton CumulativePreviewHighwaysButton;
1072    private javax.swing.JButton CumulativePreviewStationButton;
1073    private javax.swing.JLabel CurrentHighwayLabel;
1074    private javax.swing.JLabel CurrentLoopDetectorDescLabel;
1075    private javax.swing.JLabel CurrentLoopDetectorLabel;
1076    private javax.swing.JLabel CurrentLoopDetectorTypeLabel;
1077    private javax.swing.JLabel CurrentStationLabel;
1078    private javax.swing.JLabel CurrentStationLocationLabel;
1079    private javax.swing.JLabel CurrentStationPostmileLabel;
1080    private javax.swing.JLabel CurrentTimeFrameLabel;
1081    private javax.swing.JButton DeleteEventButton;
1082    private javax.swing.JButton DeleteTimeFrameButton;
1083    private javax.swing.JRadioButton GreenButton;
1084    private javax.swing.JList HighwayList;
1085    private javax.swing.JScrollPane HighwayScrollPane;
1086    private javax.swing.JScrollPane LoopDetectorScrollPane;
1087    private javax.swing.JTable LoopDetectorTable;
1088    private javax.swing.JRadioButton RedButton;
1089    private javax.swing.JButton SinglePreviewHighwaysButton;
1090    private javax.swing.JButton SinglePreviewStationButton;
1091    private javax.swing.JScrollPane StationScrollPane;
1092    private javax.swing.JTable StationTable;
1093    private javax.swing.JList TimeFrameList;
1094    private javax.swing.JScrollPane TimeFrameScrollPane;
1095    private javax.swing.JTable TrafficLaneEventsTable;
1096    private javax.swing.JRadioButton YellowButton;
1097    private javax.swing.ButtonGroup colorRadioButtons;
1098    private javax.swing.JButton jButton1;
1099    private javax.swing.JButton jButton2;
1100    private javax.swing.JButton jButton3;
1101    private javax.swing.JLabel jLabel1;
1102    private javax.swing.JLabel jLabel2;
1103    private javax.swing.JLabel jLabel3;
1104    private javax.swing.JLabel jLabel4;
1105    private javax.swing.JLabel jLabel5;
1106    private javax.swing.JLabel jLabel6;
1107    private javax.swing.JLabel jLabel7;
1108    private javax.swing.JLabel jLabel8;
1109    private javax.swing.JPanel jPanel1;
1110    private javax.swing.JPanel jPanel10;
1111    private javax.swing.JPanel jPanel11;
1112    private javax.swing.JPanel jPanel12;
1113    private javax.swing.JPanel jPanel13;
1114    private javax.swing.JPanel jPanel14;
1115    private javax.swing.JPanel jPanel2;
1116    private javax.swing.JPanel jPanel3;
1117    private javax.swing.JPanel jPanel4;
1118    private javax.swing.JPanel jPanel5;
1119    private javax.swing.JPanel jPanel6;
1120    private javax.swing.JPanel jPanel7;
1121    private javax.swing.JPanel jPanel8;
1122    private javax.swing.JPanel jPanel9;
1123    private javax.swing.JScrollPane jScrollPane1;
1124    // End of variables declaration//GEN-END:variables
1125   
1126    private void updateStatusLabels()
1127    {
1128        CurrentTimeFrameLabel.setText(timeFrames.currentTimeFrame != null
1129                ? timeFrames.currentTimeFrame.toString()
1130                : "");
1131       
1132        CurrentStationLabel.setText(timeFrames.currentStation != null
1133                ? timeFrames.currentStation.toString()
1134                : "");
1135       
1136        CurrentHighwayLabel.setText(timeFrames.currentHighway != null
1137                ? timeFrames.currentHighway.toString()
1138                : "");
1139        CurrentStationPostmileLabel.setText(timeFrames.currentStation != null
1140                ? Double.toString(timeFrames.currentStation.postmile)
1141                : "");
1142        CurrentStationLocationLabel.setText(timeFrames.currentStation != null
1143                ? timeFrames.currentStation.location
1144                : "");
1145       
1146        CurrentLoopDetectorLabel.setText(timeFrames.currentLoopDetector != null
1147                ? Integer.toString(timeFrames.currentLoopDetector.loopID)
1148                : "");
1149        CurrentLoopDetectorTypeLabel.setText(timeFrames.currentLoopDetector != null
1150                ? timeFrames.currentLoopDetector.loopLocationID
1151                : "");
1152        CurrentLoopDetectorDescLabel.setText(timeFrames.currentLoopDetector != null
1153                ? timeFrames.currentLoopDetector.loopLocation
1154                : "");
1155    }
1156   
1157    private void updateButtonEnabled()
1158    {
1159        // add event button
1160        this.AddNewEventButton.setEnabled(
1161                timeFrames.currentTimeFrame != null 
1162                && timeFrames.currentHighway != null
1163                && timeFrames.currentStation != null 
1164                && timeFrames.currentLoopDetector != null
1165        );
1166       
1167        // delete event button
1168        DeleteEventButton.setEnabled(
1169                !TrafficLaneEventsTable.getSelectionModel().isSelectionEmpty());
1170       
1171        // delete time frame button
1172        DeleteTimeFrameButton.setEnabled(!TimeFrameList.isSelectionEmpty());
1173       
1174        // single preview buttons
1175        SinglePreviewStationButton.setEnabled(
1176                timeFrames.currentStation != null
1177                && timeFrames.currentTimeFrame != null
1178        );
1179       
1180        SinglePreviewHighwaysButton.setEnabled(
1181                timeFrames.currentTimeFrame != null
1182        );
1183       
1184        // cumulative preview buttons
1185        CumulativePreviewHighwaysButton.setEnabled(
1186                timeFrames.currentTimeFrame != null
1187        );
1188       
1189        CumulativePreviewStationButton.setEnabled(
1190                timeFrames.currentTimeFrame != null
1191                && timeFrames.currentStation != null
1192        );
1193    }
1194   
1195    @Override
1196    public void update(Observable o, Object arg)
1197    {
1198        String updateArg = (String) arg;
1199        updateStatusLabels();
1200        if(updateArg != null)
1201        {
1202            if(updateArg.equals("add frame") || updateArg.equals("delete frame"))
1203            {
1204                TimeFrameList.setModel(new TimeFrameListModel());
1205                TimeFrameList.setSelectedIndex(
1206                        timeFrames.getCurrentTimeFrameIndex());
1207                TrafficLaneEventsTable.setModel(new TrafficLaneEventsTableModel());
1208            }
1209            else if(updateArg.equals("select hwy"))
1210            {
1211                StationTable.setModel(new StationTableModel());
1212                LoopDetectorTable.setModel(new LoopDetectorTableModel());
1213            }
1214            else if(updateArg.equals("select station"))
1215            {
1216                LoopDetectorTable.setModel(new LoopDetectorTableModel());
1217            }
1218            else if(updateArg.equals("select frame"))
1219            {
1220                TrafficLaneEventsTable.setModel(
1221                        new TrafficLaneEventsTableModel());
1222            }
1223            else if(updateArg.equals("add event") 
1224                    || updateArg.equals("delete event"))
1225            {
1226                TrafficLaneEventsTable.setModel(
1227                        new TrafficLaneEventsTableModel());
1228                TrafficLaneEventsTable.getSelectionModel()
1229                        .setSelectionInterval(
1230                                timeFrames.getCurrentTrafficEventIndex(), 
1231                                timeFrames.getCurrentTrafficEventIndex());
1232            }
1233        }
1234        updateButtonEnabled();
1235    }
1236}
Note: See TracBrowser for help on using the repository browser.