Changeset 19 in tmcsimulator for trunk/src/tmcsim/cadsimulator
- Timestamp:
- 04/24/2016 11:53:49 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/tmcsim/cadsimulator/viewer/SimulationStatusPanel.java
r5 r19 9 9 import java.util.logging.LogRecord; 10 10 import java.util.logging.Logger; 11 12 11 import javax.swing.BorderFactory; 13 12 import javax.swing.Box; … … 20 19 import javax.swing.border.EtchedBorder; 21 20 import javax.swing.border.TitledBorder; 22 23 21 import tmcsim.common.CADEnums.PARAMICS_STATUS; 24 22 import tmcsim.common.CADEnums.SCRIPT_STATUS; 25 23 26 24 /** 27 * SimulationStatusPanel is a GUI object used for displaying information 28 * for the current simulation.This information includes:29 * 25 * SimulationStatusPanel is a GUI object used for displaying information for the 26 * current simulation. This information includes: 27 * 30 28 * <ul> 31 29 * <li>Current simulation time.</li> … … 38 36 * <li>Error log messages</li> 39 37 * </ul> 40 * 38 * 41 39 * @author Matthew Cechini 42 40 * @version 43 41 */ 44 42 @SuppressWarnings("serial") 45 public class SimulationStatusPanel extends JPanel { 46 47 /** 48 * Logging Handler to listen for Information and Error 49 * messages logged for the CAD Simulator. Received LogRecords 50 * are displayed in the info or error message Text Area. 51 * 43 public class SimulationStatusPanel extends JPanel 44 { 45 46 /** 47 * Logging Handler to listen for Information and Error messages logged for 48 * the CAD Simulator. Received LogRecords are displayed in the info or error 49 * message Text Area. 50 * 52 51 * @author Matthew Cechini 53 52 */ 54 private class SimulatorErrorHandler extends Handler { 55 public void close() throws SecurityException { } 56 public void flush() { } 57 public void publish(LogRecord rec) { 53 private class SimulatorErrorHandler extends Handler 54 { 55 56 public void close() throws SecurityException 57 { 58 } 59 60 public void flush() 61 { 62 } 63 64 public void publish(LogRecord rec) 65 { 58 66 StringBuffer msgBuffer = new StringBuffer(); 59 67 60 msgBuffer.append(rec.getSourceClassName() + "." + 61 rec.getSourceMethodName() + " = " + 62 rec.getMessage()); 63 64 if(rec.getLevel() == Level.INFO) 65 infoMessagesTA.setText(infoMessagesTA.getText() + 66 msgBuffer.toString() + "\n"); 67 else 68 errorMessagesTA.setText(errorMessagesTA.getText() + 69 msgBuffer.toString() + "\n"); 70 } 71 } 72 73 /** Count of how many CAD clients have connected. */ 68 msgBuffer.append(rec.getSourceClassName() + "." 69 + rec.getSourceMethodName() + " = " 70 + rec.getMessage()); 71 72 if (rec.getLevel() == Level.INFO) 73 { 74 infoMessagesTA.setText(infoMessagesTA.getText() 75 + msgBuffer.toString() + "\n"); 76 } else 77 { 78 errorMessagesTA.setText(errorMessagesTA.getText() 79 + msgBuffer.toString() + "\n"); 80 } 81 } 82 } 83 /** 84 * Count of how many CAD clients have connected. 85 */ 74 86 private int numClientsConnected = 0; 75 76 /** Logging ErrorHandler. */ 87 /** 88 * Logging ErrorHandler. 89 */ 77 90 private SimulatorErrorHandler errorHandler; 78 79 /** 80 * Constructor. Initialize GUI Objects. Register the logging handler81 * tolisten for log records from all loggers that exist in the91 92 /** 93 * Constructor. Initialize GUI Objects. Register the logging handler to 94 * listen for log records from all loggers that exist in the 82 95 * "tmcsim.cadsimulator" package structure. 83 */ 84 public SimulationStatusPanel() { 85 96 */ 97 public SimulationStatusPanel() 98 { 99 86 100 initTimeAndStatus(); 87 initAdditionalInfo(); 101 initAdditionalInfo(); 88 102 initMessagesPanes(); 89 90 errorHandler = new SimulatorErrorHandler(); 91 Logger.getLogger("tmcsim.cadsimulator").addHandler(errorHandler); 92 103 104 errorHandler = new SimulatorErrorHandler(); 105 Logger.getLogger("tmcsim.cadsimulator").addHandler(errorHandler); 106 93 107 CADSimulatorViewerBox = Box.createVerticalBox(); 94 108 CADSimulatorViewerBox.add(simulationTimeAndStatusBox); … … 96 110 CADSimulatorViewerBox.add(infoMessagesPane); 97 111 CADSimulatorViewerBox.add(errorMessagesPane); 98 99 add(CADSimulatorViewerBox); 100 } 101 102 /** 103 * Method is called when a CAD Client disconnects from the CAD Simulator. 112 113 add(CADSimulatorViewerBox); 114 } 115 116 /** 117 * Method is called when a CAD Client disconnects from the CAD Simulator. 104 118 * The displayed number of connected clients is incremented by one. 105 119 */ 106 public void connectClient() { 107 120 public void connectClient() 121 { 122 108 123 numClientsConnected++; 109 110 termConnectedTF.setText(String.valueOf(numClientsConnected)); 111 } 112 113 /** 114 * Method is called when a CAD Client disconnects from the CAD Simulator. 124 125 termConnectedTF.setText(String.valueOf(numClientsConnected)); 126 } 127 128 /** 129 * Method is called when a CAD Client disconnects from the CAD Simulator. 115 130 * The displayed number of connected clients is decremented by one. 116 131 */ 117 public void disconnectClient() { 118 119 if(numClientsConnected > 0) 132 public void disconnectClient() 133 { 134 135 if (numClientsConnected > 0) 136 { 120 137 numClientsConnected--; 121 138 } 139 122 140 termConnectedTF.setText(String.valueOf(numClientsConnected)); 123 141 } 124 142 125 143 /** 126 144 * Method is called when Simulation Manager connects or disconnects. … … 128 146 * @param connection True if simulation manager is connected, false if not. 129 147 */ 130 public void setSimManagerStatus(boolean connection) { 131 132 if(connection) 133 managerConnectedTF.setText("Yes"); 134 else 148 public void setSimManagerStatus(boolean connection) 149 { 150 151 if (connection) 152 { 153 managerConnectedTF.setText("Yes"); 154 } else 155 { 135 156 managerConnectedTF.setText("No"); 136 137 } 138 139 /** 140 * Method called to convert current simulation time (parameter long value) to 141 * a string of format H:MM:SS. Time is then updated on GUI. 157 } 158 159 } 160 161 /** 162 * Method called to convert current simulation time (parameter long value) 163 * to a string of format H:MM:SS. Time is then updated on GUI. 142 164 * 143 165 * @param seconds Long value of current time 144 166 */ 145 public void setTime(long seconds) { 146 String time = new String(); 147 long timeSegment; 148 167 public void setTime(long seconds) 168 { 169 String time = new String(); 170 long timeSegment; 171 149 172 timeSegment = seconds / 3600; 150 time += String.valueOf(timeSegment) + ":"; 151 173 time += String.valueOf(timeSegment) + ":"; 174 152 175 seconds = seconds % 3600; 153 176 154 177 timeSegment = seconds / 60; 155 if(timeSegment < 10) 178 if (timeSegment < 10) 179 { 156 180 time += "0"; 157 158 time += String.valueOf(timeSegment) + ":"; 159 seconds = seconds % 60; 160 181 } 182 183 time += String.valueOf(timeSegment) + ":"; 184 seconds = seconds % 60; 185 161 186 timeSegment = seconds; 162 if(timeSegment < 10) 187 if (timeSegment < 10) 188 { 163 189 time += "0"; 164 190 } 191 165 192 time += String.valueOf(timeSegment); 166 167 simulationClockLabel.setText(time); 168 169 } 170 171 /** 172 * This method is called within the CADSimulator whenever an error occurs. The message 173 * is then displayed to the user in the "Error Messages" portion of the CAD Simulator Viewer. 174 * Invoke method with null parameter to clear messages. 193 194 simulationClockLabel.setText(time); 195 196 } 197 198 /** 199 * This method is called within the CADSimulator whenever an error occurs. 200 * The message is then displayed to the user in the "Error Messages" portion 201 * of the CAD Simulator Viewer. Invoke method with null parameter to clear 202 * messages. 175 203 * 176 204 * @param errorMessage String message that will be displayed 177 205 */ 178 protected void displayError(String errorMessage) { 179 if(errorMessage == null) 206 protected void displayError(String errorMessage) 207 { 208 if (errorMessage == null) 209 { 180 210 errorMessagesTA.setText(""); 181 else 182 errorMessagesTA.append(errorMessage + "\n"); 183 } 184 211 } else 212 { 213 errorMessagesTA.append(errorMessage + "\n"); 214 } 215 } 216 185 217 /** 186 218 * Method is called to display the current status of the simulation. 187 219 * 188 * @param newStatus Current status of simulation. The following table describes 189 * each possible status and what is displayed. Each status code is found 190 * as a public static int in the Coordinator Class. 191 * 192 *<table cellpadding="2" cellspacing="2" border="1" 193 * style="text-align: left; width: 250px;"> 194 * <tbody> 195 * <tr> 196 * <th>Status<br></th> 197 * <th>Actions Taken<br></th> 198 * </tr> 199 * <tr> 200 * <td>NO_SCRIPT<br></td> 201 * <td>Set the simulation status text to a black "No Script". <br></td> 202 * </tr> 203 * <tr> 204 * <td>SCRIPT_STOPPED_NOT_STARTED<br></td> 205 * <td>Set the simulation status text to a red "Ready". <br></td> 206 * </tr> 207 * <tr> 208 * <td>SCRIPT_PAUSED_STARTED<br></td> 209 * <td>Set the simulation status text to a red "Paused". <br></td> 210 * </tr> 211 * <tr> 212 * <td>SCRIPT_RUNNING<br></td> 213 * <td>Set the simulation status text to a green "Running". <br></td> 214 * </tr> 215 * <tr> 216 * <td>ATMS_SYNCHRONIZATION<br></td> 217 * <td>Set the simulation status text to an orange "Synchronizing". <br></td> 218 * </tr> 219 * </tbody> 220 *</table> */ 221 public void setScriptStatus(SCRIPT_STATUS newStatus) { 222 223 switch(newStatus) { 220 * @param newStatus Current status of simulation. The following table 221 * describes each possible status and what is displayed. Each status code is 222 * found as a public static int in the Coordinator Class. 223 * 224 * <table cellpadding="2" cellspacing="2" border="1" style="text-align: 225 * left; width: 250px;"> 226 * <tbody> 227 * <tr> 228 * <th>Status<br></th> 229 * <th>Actions Taken<br></th> 230 * </tr> 231 * <tr> 232 * <td>NO_SCRIPT<br></td> 233 * <td>Set the simulation status text to a black "No Script". <br></td> 234 * </tr> 235 * <tr> 236 * <td>SCRIPT_STOPPED_NOT_STARTED<br></td> 237 * <td>Set the simulation status text to a red "Ready". <br></td> 238 * </tr> 239 * <tr> 240 * <td>SCRIPT_PAUSED_STARTED<br></td> 241 * <td>Set the simulation status text to a red "Paused". <br></td> 242 * </tr> 243 * <tr> 244 * <td>SCRIPT_RUNNING<br></td> 245 * <td>Set the simulation status text to a green "Running". <br></td> 246 * </tr> 247 * <tr> 248 * <td>ATMS_SYNCHRONIZATION<br></td> 249 * <td>Set the simulation status text to an orange "Synchronizing". 250 * <br></td> 251 * </tr> 252 * </tbody> 253 * </table> 254 */ 255 public void setScriptStatus(SCRIPT_STATUS newStatus) 256 { 257 258 switch (newStatus) 259 { 224 260 case NO_SCRIPT: 225 261 simulationStatusText.setText("No Script"); 226 simulationStatusText.setForeground(Color.BLACK); 227 break; 228 262 simulationStatusText.setForeground(Color.BLACK); 263 break; 264 229 265 case SCRIPT_STOPPED_NOT_STARTED: 230 266 simulationStatusText.setText("Ready"); 231 simulationStatusText.setForeground(Color.RED); 232 break; 233 267 simulationStatusText.setForeground(Color.RED); 268 break; 269 234 270 case SCRIPT_PAUSED_STARTED: 235 271 simulationStatusText.setText("Paused"); 236 272 simulationStatusText.setForeground(Color.RED); 237 273 break; 238 274 239 275 case SCRIPT_RUNNING: 240 276 simulationStatusText.setText("Running"); … … 245 281 simulationStatusText.setForeground(Color.ORANGE); 246 282 break; 247 248 } 249 } 250 283 284 } 285 } 286 251 287 /** 252 288 * Method is called when a connection to paramics is made or dropped. 253 289 * 254 * @param newStatus The status denoting whether a connection has been 255 * made or dropped. 256 */ 257 public void setParamicsStatus(PARAMICS_STATUS newStatus) { 258 259 switch(newStatus) { 290 * @param newStatus The status denoting whether a connection has been made 291 * or dropped. 292 */ 293 public void setParamicsStatus(PARAMICS_STATUS newStatus) 294 { 295 296 switch (newStatus) 297 { 260 298 case CONNECTED: 261 299 paramicsConnectedTF.setText("Yes"); 262 300 break; 263 301 case DISCONNECTED: 264 paramicsConnectedTF.setText("No"); 265 break; 266 } 267 } 268 302 paramicsConnectedTF.setText("No"); 303 break; 304 } 305 } 306 269 307 /** 270 308 * Method is called when a paramics network is loaded. … … 272 310 * @param networkID Unique ID for Paramics network that has been loaded. 273 311 */ 274 public void setParamicsNetworkLoaded(String networkID) { 312 public void setParamicsNetworkLoaded(String networkID) 313 { 275 314 networkLoadedTF.setText(networkID); 276 } 277 278 279 /** Initialize Time and Status GUI Components */ 280 private void initTimeAndStatus() { 281 282 simulationTime = new JPanel(); 283 simulationClock = new JPanel(); 284 simulationStatus = new JLabel("Simulation Status"); 315 } 316 317 /** 318 * Initialize Time and Status GUI Components 319 */ 320 private void initTimeAndStatus() 321 { 322 323 simulationTime = new JPanel(); 324 simulationClock = new JPanel(); 325 simulationStatus = new JLabel("Simulation Status"); 285 326 simulationStatusText = new JLabel("No Script"); 286 287 simulationTime.setLayout(new BorderLayout()); 327 328 simulationTime.setLayout(new BorderLayout()); 288 329 simulationClock.setPreferredSize(new Dimension(100, 60)); 289 330 simulationTimeAndStatusBox = new Box(BoxLayout.X_AXIS); 290 simulationStatusBox = new Box(BoxLayout.Y_AXIS); 291 simulationTimeBox = new Box(BoxLayout.Y_AXIS);292 simulationClockBox = new Box(BoxLayout.X_AXIS);293 331 simulationStatusBox = new Box(BoxLayout.Y_AXIS); 332 simulationTimeBox = new Box(BoxLayout.Y_AXIS); 333 simulationClockBox = new Box(BoxLayout.X_AXIS); 334 294 335 simulationStatus.setAlignmentX(Box.CENTER_ALIGNMENT); 295 336 simulationStatusText.setAlignmentX(Box.CENTER_ALIGNMENT); 296 337 simulationStatusText.setName("simulationStatusText"); 297 338 298 339 TitledBorder title = BorderFactory.createTitledBorder( 299 340 BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Status"); 300 341 title.setTitleJustification(TitledBorder.LEFT); 301 342 simulationStatusBox.setBorder(title); 302 343 303 344 simulationStatusBox.setMaximumSize(new Dimension(140, 60)); 304 simulationStatusBox.setAlignmentX(Box.CENTER_ALIGNMENT); 305 345 simulationStatusBox.setAlignmentX(Box.CENTER_ALIGNMENT); 346 306 347 simulationStatusBox.add(Box.createHorizontalStrut(120)); 307 348 simulationStatusBox.add(Box.createVerticalGlue()); 308 349 simulationStatusBox.add(simulationStatusText); 309 350 simulationStatusBox.add(Box.createVerticalGlue()); 310 351 311 352 simulationClockLabel = new JLabel("0:00:00"); 312 353 simulationClockLabel.setFont(new Font("Geneva", Font.BOLD, 70)); 354 simulationClockLabel.setName("simulationClockLabel"); 313 355 simulationClockLabel.setForeground(Color.BLACK); 314 356 simulationClockLabel.setBackground(Color.BLACK); … … 316 358 simulationClockBox.setBackground(Color.BLACK); 317 359 simulationClockBox.add(simulationClockLabel); 318 simulationClockBox.setAlignmentX(Box.CENTER_ALIGNMENT); 360 simulationClockBox.setAlignmentX(Box.CENTER_ALIGNMENT); 319 361 simulationTimeBox.add(simulationClockBox); 320 321 simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20)); 362 363 simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20)); 322 364 simulationTimeAndStatusBox.add(simulationTimeBox); 323 365 simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20)); 324 simulationTimeAndStatusBox.add(simulationStatusBox); 325 simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20)); 326 } 327 328 329 /** Initialize Additional Info Label GUI Components */ 330 private void initAdditionalInfo() { 331 366 simulationTimeAndStatusBox.add(simulationStatusBox); 367 simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20)); 368 } 369 370 /** 371 * Initialize Additional Info Label GUI Components 372 */ 373 private void initAdditionalInfo() 374 { 375 332 376 terminalsConnectedLabel = new JLabel("Connected CAD Terminals: "); 333 termConnectedTF = new JTextField(" " + String.valueOf(numClientsConnected));377 termConnectedTF = new JTextField(" " + String.valueOf(numClientsConnected)); 334 378 termConnectedTF.setEditable(false); 335 379 termConnectedTF.setName("termConnectedTF"); 336 380 337 381 termConnectedBox = new Box(BoxLayout.X_AXIS); 338 382 termConnectedBox.add(terminalsConnectedLabel); 339 383 termConnectedBox.add(Box.createHorizontalGlue()); 340 384 termConnectedBox.add(termConnectedTF); 341 342 343 managerConnectedLabel = new JLabel("Simulation Manager Connected: ");385 386 387 managerConnectedLabel = new JLabel("Simulation Manager Connected: "); 344 388 managerConnectedTF = new JTextField(" No"); 345 389 managerConnectedTF.setEditable(false); 346 390 managerConnectedTF.setName("managerConnectedTF"); 347 391 348 392 managerConnectedBox = new Box(BoxLayout.X_AXIS); 349 393 managerConnectedBox.add(managerConnectedLabel); 350 394 managerConnectedBox.add(Box.createHorizontalGlue()); 351 395 managerConnectedBox.add(managerConnectedTF); 352 353 354 paramicsConnectedLabel = new JLabel("Connected to Paramics: ");396 397 398 paramicsConnectedLabel = new JLabel("Connected to Paramics: "); 355 399 paramicsConnectedTF = new JTextField(" No"); 356 400 paramicsConnectedTF.setEditable(false); 357 401 paramicsConnectedTF.setName("paramicsConnectedTF"); 402 358 403 paramicsConnectedBox = new Box(BoxLayout.X_AXIS); 359 404 paramicsConnectedBox.add(paramicsConnectedLabel); 360 405 paramicsConnectedBox.add(Box.createHorizontalGlue()); 361 406 paramicsConnectedBox.add(paramicsConnectedTF); 362 363 364 networkLoadedLabel = new JLabel("Network Loaded: ");365 networkLoadedTF = new JTextField("None"); 407 408 409 networkLoadedLabel = new JLabel("Network Loaded: "); 410 networkLoadedTF = new JTextField("None"); 366 411 networkLoadedTF.setEditable(false); 367 412 networkLoadedTF.setName("networkLoadedTF"); 413 368 414 networkLoadedBox = new Box(BoxLayout.X_AXIS); 369 415 networkLoadedBox.add(networkLoadedLabel); 370 416 networkLoadedBox.add(Box.createHorizontalGlue()); 371 417 networkLoadedBox.add(networkLoadedTF); 372 418 373 419 374 420 additionalInfoBox = new Box(BoxLayout.Y_AXIS); 375 additionalInfoBox.setMinimumSize(new Dimension(300, 150)); 376 421 additionalInfoBox.setMinimumSize(new Dimension(300, 150)); 422 377 423 additionalInfoBox.add(Box.createVerticalStrut(10)); 378 additionalInfoBox.add(termConnectedBox); 424 additionalInfoBox.add(termConnectedBox); 379 425 additionalInfoBox.add(Box.createVerticalStrut(10)); 380 additionalInfoBox.add(managerConnectedBox); 426 additionalInfoBox.add(managerConnectedBox); 381 427 additionalInfoBox.add(Box.createVerticalStrut(10)); 382 additionalInfoBox.add(paramicsConnectedBox); 428 additionalInfoBox.add(paramicsConnectedBox); 383 429 additionalInfoBox.add(Box.createVerticalStrut(10)); 384 additionalInfoBox.add(networkLoadedBox); 385 additionalInfoBox.add(Box.createVerticalStrut(20)); 386 387 388 } 389 390 /** Initialize Info & Error Messages GUI Components */ 391 private void initMessagesPanes() { 430 additionalInfoBox.add(networkLoadedBox); 431 additionalInfoBox.add(Box.createVerticalStrut(20)); 432 433 434 } 435 436 /** 437 * Initialize Info & Error Messages GUI Components 438 */ 439 private void initMessagesPanes() 440 { 392 441 393 442 infoMessagesTA = new JTextArea(6, 30); … … 396 445 infoMessagesPane = new JScrollPane(infoMessagesTA); 397 446 infoMessagesPane.setPreferredSize(new Dimension(300, 100)); 398 447 infoMessagesPane.setName("infoMessagesPane"); 399 448 infoMessagesPane.setBorder(BorderFactory.createTitledBorder( 400 BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Info Messages")); 449 BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Info Messages")); 401 450 infoMessagesPane.setName("infoMessagesPane"); 402 451 403 452 errorMessagesTA = new JTextArea(6, 30); 404 453 errorMessagesTA.setForeground(Color.RED); 405 454 errorMessagesTA.setEditable(false); 455 errorMessagesTA.setName("errorMessagesTA"); 406 456 errorMessagesPane = new JScrollPane(errorMessagesTA); 407 457 errorMessagesPane.setPreferredSize(new Dimension(300, 150)); 408 458 errorMessagesPane.setName("errorMessagesPane"); 409 459 errorMessagesPane.setBorder(BorderFactory.createTitledBorder( 410 BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Error Messages")); 411 412 } 413 414 460 BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Error Messages")); 461 462 } 415 463 private Box additionalInfoBox; 416 private Box termConnectedBox; 417 private Box managerConnectedBox; 464 private Box termConnectedBox; 465 private Box managerConnectedBox; 418 466 private Box paramicsConnectedBox; 419 private Box networkLoadedBox; 467 private Box networkLoadedBox; 420 468 private Box CADSimulatorViewerBox; 421 469 private Box simulationTimeAndStatusBox; 422 private Box simulationStatusBox; 470 private Box simulationStatusBox; 423 471 private Box simulationTimeBox; 424 472 private Box simulationClockBox; 425 426 473 private JLabel managerConnectedLabel; 427 private JLabel paramicsConnectedLabel; 474 private JLabel paramicsConnectedLabel; 428 475 private JLabel simulationStatus; 429 476 private JLabel simulationClockLabel; 430 477 private JLabel simulationStatusText; 431 private JLabel terminalsConnectedLabel; 478 private JLabel terminalsConnectedLabel; 432 479 private JLabel networkLoadedLabel; 433 434 480 private JPanel simulationTime; 435 private JPanel simulationClock; 436 481 private JPanel simulationClock; 437 482 private JTextField managerConnectedTF; 438 483 private JTextField paramicsConnectedTF; 439 484 private JTextField termConnectedTF; 440 485 private JTextField networkLoadedTF; 441 442 486 private JScrollPane infoMessagesPane; 443 487 private JScrollPane errorMessagesPane; 444 445 488 private JTextArea infoMessagesTA; 446 489 private JTextArea errorMessagesTA;
Note: See TracChangeset
for help on using the changeset viewer.
