source: tmcsimulator/trunk/src/tmcsim/client/ATMSBatchViewer.java @ 135

Revision 135, 11.5 KB checked in by jdalbey, 9 years ago (diff)

ATMSBatchDriver.java Implemented "clear incident" feature.

Line 
1
2package tmcsim.client;
3
4import java.util.ArrayList;
5import java.util.HashSet;
6import java.util.LinkedList;
7import java.util.List;
8import java.util.Queue;
9import java.util.Set;
10import java.util.Vector;
11import javax.swing.AbstractListModel;
12import javax.swing.JLabel;
13import javax.swing.JList;
14import javax.swing.JOptionPane;
15
16/**
17 *
18 * @author jdalbey
19 */
20public class ATMSBatchViewer extends javax.swing.JFrame 
21{
22    /** Reference to the driver associated with this GUI */
23    private ATMSBatchDriver driver; 
24    private final List<String> incidents;
25    /**
26     * Creates new form ATMSBatchViewer.
27     * @param incidents a list of incidents to show in a list.
28     */
29    public ATMSBatchViewer(ATMSBatchDriver driver, List<String> incidentList) 
30    {
31        initComponents();
32        this.driver = driver; 
33        this.incidents = incidentList;
34        lstIncidents.setModel(new javax.swing.AbstractListModel<String>()
35        {
36            public int getSize() { return incidents.size(); }
37            public String getElementAt(int i) { return incidents.get(i); }
38        });       
39    }
40
41    public void update(String currentTime, Queue<String> events)
42    {
43        lstEvents.setModel(new MyListModel(events));
44        txtClockTime.setText(currentTime);
45    }
46    class MyListModel extends AbstractListModel<String>
47    {
48            String[] strings = { "item 1", "item 2" };
49            public MyListModel(Queue<String> events)
50            {
51                strings = events.toArray(new String[events.size()]);               
52            }
53            public int getSize() { return strings.length; }
54            public String getElementAt(int i) { return strings[i]; }       
55    }
56    /**
57     * This method is called from within the constructor to initialize the form.
58     * WARNING: Do NOT modify this code. The content of this method is always
59     * regenerated by the Form Editor.
60     */
61    @SuppressWarnings("unchecked")
62    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
63    private void initComponents()
64    {
65
66        pnlEvents = new javax.swing.JPanel();
67        scrollEvents = new javax.swing.JScrollPane();
68        lstEvents = new javax.swing.JList<>();
69        txtClockTime = new javax.swing.JLabel();
70        pnlIncidents = new javax.swing.JPanel();
71        btnClear = new javax.swing.JButton();
72        jScrollPane1 = new javax.swing.JScrollPane();
73        lstIncidents = new javax.swing.JList<>();
74
75        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
76
77        lstEvents.setFont(new java.awt.Font("Noto Mono", 0, 12)); // NOI18N
78        lstEvents.setModel(new javax.swing.AbstractListModel<String>()
79        {
80            String[] strings = { "item 1", "item 2" };
81            public int getSize() { return strings.length; }
82            public String getElementAt(int i) { return strings[i]; }
83        });
84        scrollEvents.setViewportView(lstEvents);
85
86        txtClockTime.setFont(new java.awt.Font("Noto Sans", 1, 14)); // NOI18N
87        txtClockTime.setText("0:00:00");
88
89        javax.swing.GroupLayout pnlEventsLayout = new javax.swing.GroupLayout(pnlEvents);
90        pnlEvents.setLayout(pnlEventsLayout);
91        pnlEventsLayout.setHorizontalGroup(
92            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
93            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlEventsLayout.createSequentialGroup()
94                .addContainerGap(74, Short.MAX_VALUE)
95                .addComponent(scrollEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 354, javax.swing.GroupLayout.PREFERRED_SIZE)
96                .addGap(59, 59, 59))
97            .addGroup(pnlEventsLayout.createSequentialGroup()
98                .addGap(186, 186, 186)
99                .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
100                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
101        );
102        pnlEventsLayout.setVerticalGroup(
103            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
104            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlEventsLayout.createSequentialGroup()
105                .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
106                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
107                .addComponent(scrollEvents, javax.swing.GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
108                .addContainerGap())
109        );
110
111        btnClear.setText("Clear Incident");
112        btnClear.addActionListener(new java.awt.event.ActionListener()
113        {
114            public void actionPerformed(java.awt.event.ActionEvent evt)
115            {
116                btnClearActionPerformed(evt);
117            }
118        });
119
120        lstIncidents.setFont(new java.awt.Font("Noto Mono", 0, 15)); // NOI18N
121        lstIncidents.setModel(new javax.swing.AbstractListModel<String>()
122        {
123            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
124            public int getSize() { return strings.length; }
125            public String getElementAt(int i) { return strings[i]; }
126        });
127        lstIncidents.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
128        jScrollPane1.setViewportView(lstIncidents);
129
130        javax.swing.GroupLayout pnlIncidentsLayout = new javax.swing.GroupLayout(pnlIncidents);
131        pnlIncidents.setLayout(pnlIncidentsLayout);
132        pnlIncidentsLayout.setHorizontalGroup(
133            pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
134            .addGroup(pnlIncidentsLayout.createSequentialGroup()
135                .addGroup(pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
136                    .addComponent(btnClear)
137                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE))
138                .addGap(0, 173, Short.MAX_VALUE))
139        );
140        pnlIncidentsLayout.setVerticalGroup(
141            pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
142            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlIncidentsLayout.createSequentialGroup()
143                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
144                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
145                .addComponent(btnClear)
146                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
147        );
148
149        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
150        getContentPane().setLayout(layout);
151        layout.setHorizontalGroup(
152            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
153            .addGroup(layout.createSequentialGroup()
154                .addComponent(pnlEvents, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
155                .addContainerGap())
156            .addGroup(layout.createSequentialGroup()
157                .addGap(76, 76, 76)
158                .addComponent(pnlIncidents, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
159                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
160        );
161        layout.setVerticalGroup(
162            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
163            .addGroup(layout.createSequentialGroup()
164                .addComponent(pnlEvents, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
165                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
166                .addComponent(pnlIncidents, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
167                .addContainerGap())
168        );
169
170        pack();
171    }// </editor-fold>//GEN-END:initComponents
172
173    private void btnClearActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnClearActionPerformed
174    {//GEN-HEADEREND:event_btnClearActionPerformed
175        String selectedItem =  lstIncidents.getSelectedValue();
176        if (selectedItem == null)
177        {
178            JOptionPane.showMessageDialog(this, "No Incident Selected", "Warning", JOptionPane.INFORMATION_MESSAGE);
179        }
180        else
181        {
182            System.out.println("Clicked Incident:" + selectedItem);
183            if (driver != null) driver.clearIncident(selectedItem);
184            lstIncidents.clearSelection();
185            // Remove selectedItem from list model;
186            incidents.remove(selectedItem);
187            // Update the list displayed
188            String[] array = new String[incidents.size()];
189            array = incidents.toArray(array);
190            lstIncidents.setListData(array);
191        }
192    }//GEN-LAST:event_btnClearActionPerformed
193
194    /**
195     * @param args the command line arguments
196     */
197    public static void main(String args[]) {
198        /* Set the Nimbus look and feel */
199        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
200        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
201         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
202         */
203        try {
204            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
205                if ("Nimbus".equals(info.getName())) {
206                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
207                    break;
208                }
209            }
210        } catch (ClassNotFoundException ex) {
211            java.util.logging.Logger.getLogger(ATMSBatchViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
212        } catch (InstantiationException ex) {
213            java.util.logging.Logger.getLogger(ATMSBatchViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
214        } catch (IllegalAccessException ex) {
215            java.util.logging.Logger.getLogger(ATMSBatchViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
216        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
217            java.util.logging.Logger.getLogger(ATMSBatchViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
218        }
219        //</editor-fold>
220
221        /* Create and display the form */
222        java.awt.EventQueue.invokeLater(new Runnable() {
223            public void run() {
224                Queue<String> sample = new LinkedList<String>();
225                sample.add("Greetings");
226                sample.add("Earthling");
227                List<String> items = new ArrayList<String>();
228                items.add("Able"); items.add("Baker");
229                ATMSBatchViewer view = new ATMSBatchViewer(null,items);
230                view.setVisible(true);
231                view.update("01", sample);
232               
233            }
234        });
235    }
236
237    // Variables declaration - do not modify//GEN-BEGIN:variables
238    private javax.swing.JButton btnClear;
239    private javax.swing.JScrollPane jScrollPane1;
240    private javax.swing.JList<String> lstEvents;
241    private javax.swing.JList<String> lstIncidents;
242    private javax.swing.JPanel pnlEvents;
243    private javax.swing.JPanel pnlIncidents;
244    private javax.swing.JScrollPane scrollEvents;
245    private javax.swing.JLabel txtClockTime;
246    // End of variables declaration//GEN-END:variables
247}
Note: See TracBrowser for help on using the repository browser.