Ignore:
Timestamp:
11/01/2017 12:31:34 PM (9 years ago)
Author:
jdalbey
Message:

TrafficModelManager?.java Refactor to use Observable, along with the view. Add Reload button functionality.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.java

    r188 r206  
    77import java.util.LinkedList; 
    88import java.util.List; 
     9import java.util.Observable; 
     10import java.util.Observer; 
     11import java.util.Vector; 
    912import java.util.logging.Level; 
    1013import java.util.logging.Logger; 
     
    1619 * @author jdalbey 
    1720 */ 
    18 public class TrafficModelViewer extends javax.swing.JFrame 
     21public class TrafficModelViewer extends javax.swing.JFrame implements Observer 
    1922{ 
    2023 
     
    2326     */ 
    2427    private TrafficModelManager driver; 
    25     private final List<String> incidents; 
     28    private List<String> incidents; 
    2629 
    2730    /** 
     
    3033     * @param incidents a list of incidents to show in a list. 
    3134     */ 
    32     public TrafficModelViewer(TrafficModelManager driver, List<String> incidentList) 
     35    public TrafficModelViewer(TrafficModelManager driver) 
    3336    { 
    3437        initComponents(); 
    3538        this.driver = driver; 
    36         this.incidents = incidentList; 
    37         lstIncidents.setModel(new javax.swing.AbstractListModel<String>() 
    38         { 
    39             public int getSize() 
    40             { 
    41                 return incidents.size(); 
    42             } 
    43  
    44             public String getElementAt(int i) 
    45             { 
    46                 return incidents.get(i); 
    47             } 
    48         }); 
     39            txtClockTime.setText(driver.getClockTime()); 
     40            lstIncidents.setListData(driver.getIncidents()); 
     41            lstEvents.setModel(new MyListModel(driver.getEventQueue())); 
     42         
     43//        this.incidents = incidentList; 
     44//        lstIncidents.setModel(new javax.swing.AbstractListModel<String>() 
     45//        { 
     46//            public int getSize() 
     47//            { 
     48//                return incidents.size(); 
     49//            } 
     50// 
     51//            public String getElementAt(int i) 
     52//            { 
     53//                return incidents.get(i); 
     54//            } 
     55//        }); 
    4956    } 
    5057 
    51     public void update(String currentTime, String atmsTime, List<TrafficEvent> events) 
    52     { 
    53         lstEvents.setModel(new MyListModel(events)); 
    54         txtClockTime.setText(currentTime + " / " + atmsTime); 
     58//    public void update(String currentTime, String atmsTime, List<TrafficEvent> events) 
     59//    { 
     60//        lstEvents.setModel(new MyListModel(events)); 
     61//        txtClockTime.setText(currentTime + " / " + atmsTime); 
     62//    } 
     63 
     64    @Override 
     65    public void update(Observable obs, Object obj) 
     66    { 
     67        if (obj == null) return; 
     68        if (obj instanceof String) 
     69        { 
     70            String currentTime = (String) obj; 
     71            txtClockTime.setText(currentTime); 
     72        } 
     73        if (obj instanceof Vector) 
     74        { 
     75            lstIncidents.setListData((Vector)obj); 
     76        } 
     77        if (obj instanceof LinkedList) 
     78        { 
     79            lstEvents.setModel(new MyListModel((LinkedList)obj)); 
     80        } 
    5581    } 
    5682 
     
    90116        lstEvents = new javax.swing.JList<>(); 
    91117        txtClockTime = new javax.swing.JLabel(); 
     118        btnReload = new javax.swing.JButton(); 
    92119        pnlIncidents = new javax.swing.JPanel(); 
    93120        jScrollPane1 = new javax.swing.JScrollPane(); 
     
    109136        txtClockTime.setFont(new java.awt.Font("Noto Sans", 1, 14)); // NOI18N 
    110137        txtClockTime.setText("0:00:00"); 
     138 
     139        btnReload.setText("Reload"); 
     140        btnReload.addActionListener(new java.awt.event.ActionListener() 
     141        { 
     142            public void actionPerformed(java.awt.event.ActionEvent evt) 
     143            { 
     144                btnReloadActionPerformed(evt); 
     145            } 
     146        }); 
    111147 
    112148        javax.swing.GroupLayout pnlEventsLayout = new javax.swing.GroupLayout(pnlEvents); 
     
    115151            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
    116152            .addGroup(pnlEventsLayout.createSequentialGroup() 
    117                 .addGroup(pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
    118                     .addGroup(pnlEventsLayout.createSequentialGroup() 
    119                         .addGap(112, 112, 112) 
    120                         .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)) 
    121                     .addGroup(pnlEventsLayout.createSequentialGroup() 
    122                         .addContainerGap() 
    123                         .addComponent(scrollEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 430, javax.swing.GroupLayout.PREFERRED_SIZE))) 
     153                .addContainerGap() 
     154                .addComponent(scrollEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 430, javax.swing.GroupLayout.PREFERRED_SIZE) 
    124155                .addContainerGap(20, Short.MAX_VALUE)) 
     156            .addGroup(pnlEventsLayout.createSequentialGroup() 
     157                .addGap(112, 112, 112) 
     158                .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE) 
     159                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     160                .addComponent(btnReload) 
     161                .addGap(32, 32, 32)) 
    125162        ); 
    126163        pnlEventsLayout.setVerticalGroup( 
    127164            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
    128165            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlEventsLayout.createSequentialGroup() 
    129                 .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) 
     166                .addGroup(pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
     167                    .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) 
     168                    .addComponent(btnReload)) 
    130169                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
    131170                .addComponent(scrollEvents, javax.swing.GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE) 
     
    213252            lstIncidents.clearSelection(); 
    214253            // Remove selectedItem from list model; 
    215             incidents.remove(selectedItem); 
     254//            incidents.remove(selectedItem); 
    216255            // Update the list displayed 
    217             String[] array = new String[incidents.size()]; 
    218             array = incidents.toArray(array); 
    219             lstIncidents.setListData(array); 
     256//            String[] array = new String[incidents.size()]; 
     257//            array = incidents.toArray(array); 
     258//            lstIncidents.setListData(array); 
    220259        } 
    221260    }//GEN-LAST:event_btnClearActionPerformed 
    222261 
     262    private void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed 
     263    {//GEN-HEADEREND:event_btnReloadActionPerformed 
     264        String message = "Reload will delete all events in the queue and reload the events file."; 
     265        String title = "Please Confirm"; 
     266        // display the JOptionPane showConfirmDialog 
     267        int reply = JOptionPane.showConfirmDialog(this, message, title, JOptionPane.YES_NO_OPTION); 
     268        if (reply == JOptionPane.YES_OPTION) 
     269        { 
     270            driver.loadEvents(); 
     271        } 
     272    }//GEN-LAST:event_btnReloadActionPerformed 
     273     
    223274    /** 
    224275     * @param args the command line arguments 
     
    279330                    items.add("180"); 
    280331                    items.add("1291"); 
    281                     TrafficModelViewer view = new TrafficModelViewer(null, items); 
     332                    TrafficModelViewer view = new TrafficModelViewer(null); 
    282333                    view.setVisible(true); 
    283                     view.update("01", "02", sample); 
     334                    //view.update("01", "02", sample); 
    284335                } 
    285336                catch (ParseException ex) 
     
    294345    // Variables declaration - do not modify//GEN-BEGIN:variables 
    295346    private javax.swing.JButton btnClear; 
     347    private javax.swing.JButton btnReload; 
    296348    private javax.swing.JScrollPane jScrollPane1; 
    297349    private javax.swing.JList<String> lstEvents; 
Note: See TracChangeset for help on using the changeset viewer.