To load this file without formatting, visit http://whoyouknow.co.uk/ants/java/17.1/src/ants/control/AntControl.java. This is a spam-protection measure; sorry for the inconvenience.

· AntControl.java ·

   1/*
   2 * AntControl.java
   3 *
   4 * Created on 28 November 2006, 00:49
   5 */
   6
   7package ants.control;
   8
   9import ants.Ant;
  10import ants.Grid;
  11import ants.event.AntEvent;
  12import ants.event.AntListener;
  13import ants.event.EnterNestAntEvent;
  14import ants.event.ExitNestAntEvent;
  15import ants.event.FoodUpdateEvent;
  16import ants.event.NewAntEvent;
  17import ants.event.PickedUpFoodAntEvent;
  18import java.awt.event.ActionEvent;
  19import java.awt.event.ActionListener;
  20import javax.swing.DefaultListModel;
  21
  22/**
  23 *
  24 * @author  James Hamilton
  25 */
  26public class AntControl extends javax.swing.JFrame implements AntListener, Runnable {
  27    
  28    private static AntControl singleton = null;
  29    
  30    private int totalAnts = 0;
  31    private int antsInNest = 0;
  32    private int antsRoaming = 0;
  33    private int antsCarryingFood = 0;
  34    
  35    private int totalFood = 0;
  36    private int collectedFood = 0;
  37    private int remainingFood = 0;
  38
  39    private long startTime = System.currentTimeMillis();
  40
  41    private boolean running = true;
  42    
  43    private Thread move;
  44    private DefaultListModel myAnts = new DefaultListModel();
  45    /** Creates new form AntControl */
  46    public AntControl() {
  47        initComponents();
  48        
  49        this.setLocation(500, 0);
  50 
  51       btnPause.addActionListener( new ActionListener() {
  52            public void actionPerformed(ActionEvent e) {
  53                for(Ant a : Grid.getInstance().getNest().getAnts()) {
  54                    a.pause();
  55                }
  56            }
  57        });
  58        
  59        move = new Thread(this);
  60        move.setDaemon(true);
  61        move.start();   
  62        
  63
  64    }
  65    
  66    public void antEventHandler(AntEvent event) {
  67        if(event instanceof NewAntEvent) {
  68            totalAnts++;
  69            antsInNest++;
  70            Ant a = (Ant)event.getSource();
  71            myAnts.addElement(a);
  72            lstAnts.setModel(myAnts);
  73           
  74        }else if(event instanceof ExitNestAntEvent) {
  75            antsRoaming++;
  76            antsInNest--;
  77        }else if(event instanceof EnterNestAntEvent) {
  78            antsCarryingFood--;
  79            antsInNest++;
  80            collectedFood++;
  81            remainingFood = Grid.getInstance().getGridSquares().getFoodGridSquares().size();//totalFood - collectedFood;
  82        }else if(event instanceof PickedUpFoodAntEvent) {
  83            antsCarryingFood++;
  84            antsRoaming--;
  85        }else if(event instanceof FoodUpdateEvent) {
  86            totalFood = Grid.getInstance().getGridSquares().getFoodGridSquares().size();
  87            remainingFood = totalFood;
  88        }     
  89        
  90        txtNumberOfAnts.setText(Integer.toString(getTotalAnts()));
  91        txtNumberOfAntsInNest.setText(Integer.toString(getAntsInNest()));
  92        txtNumberOfAntsCarryingFood.setText(Integer.toString(getAntsCarryingFood()));
  93        txtNumberOfAntsRoaming.setText(Integer.toString(getAntsRoaming()));
  94 
  95        txtTotalFood.setText(Integer.toString(getTotalFood()));
  96        txtCollectedFood.setText(Integer.toString(getCollectedFood()));
  97        txtRemainingFood.setText(Integer.toString(getRemainingFood()));
  98         if(remainingFood == 0) running = false;
  99         else running = true;
 100    }
 101 
 102    public void run() {
 103        while(running) {
 104            long currentTime = (System.currentTimeMillis() - startTime);
 105            
 106            txtTime.setText(millisecondsToString(currentTime));
 107               
 108            try {
 109                
 110                move.sleep(1000);
 111            }catch (InterruptedException e) {
 112                
 113            }
 114        }
 115    }
 116
 117    public static String millisecondsToString(long time) {
 118        //http://www.uk-dave.com/bytes/java/long2time.php
 119        int milliseconds = (int)(time % 1000);
 120        int seconds = (int)((time/1000) % 60);
 121        int minutes = (int)((time/60000) % 60);
 122        int hours = (int)((time/3600000) % 24);
 123        String millisecondsStr = (milliseconds<10 ? "00" : (milliseconds<100 ? "0" : ""))+milliseconds;
 124        String secondsStr = (seconds<10 ? "0" : "")+seconds;
 125        String minutesStr = (minutes<10 ? "0" : "")+minutes;
 126        String hoursStr = (hours<10 ? "0" : "")+hours;
 127        return new String(hoursStr+":"+minutesStr+":"+secondsStr);//+"."+millisecondsStr);
 128    }
 129    
 130    public static AntControl getInstance() {
 131        if(getSingleton() == null)
 132            setSingleton(new AntControl());
 133        return getSingleton();
 134    }
 135    
 136    /** This method is called from within the constructor to
 137     * initialize the form.
 138     * WARNING: Do NOT modify this code. The content of this method is
 139     * always regenerated by the Form Editor.
 140     */
 141    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
 142    private void initComponents() {
 143        jLabel1 = new javax.swing.JLabel();
 144        jLabel2 = new javax.swing.JLabel();
 145        jLabel3 = new javax.swing.JLabel();
 146        txtNumberOfAntsInNest = new javax.swing.JTextField();
 147        txtNumberOfAntsRoaming = new javax.swing.JTextField();
 148        jLabel4 = new javax.swing.JLabel();
 149        jLabel5 = new javax.swing.JLabel();
 150        txtNumberOfAntsCarryingFood = new javax.swing.JTextField();
 151        jLabel6 = new javax.swing.JLabel();
 152        txtNumberOfAnts = new javax.swing.JTextField();
 153        txtTotalFood = new javax.swing.JTextField();
 154        jLabel7 = new javax.swing.JLabel();
 155        jLabel8 = new javax.swing.JLabel();
 156        jLabel9 = new javax.swing.JLabel();
 157        txtCollectedFood = new javax.swing.JTextField();
 158        txtRemainingFood = new javax.swing.JTextField();
 159        jLabel10 = new javax.swing.JLabel();
 160        jLabel11 = new javax.swing.JLabel();
 161        txtTime = new javax.swing.JTextField();
 162        jScrollPane1 = new javax.swing.JScrollPane();
 163        lstAnts = new javax.swing.JList();
 164        btnPause = new javax.swing.JButton();
 165
 166        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 167        jLabel1.setText("Ants");
 168
 169        jLabel2.setText("Total");
 170
 171        jLabel3.setText("In Nest");
 172
 173        txtNumberOfAntsInNest.setEditable(false);
 174
 175        txtNumberOfAntsRoaming.setEditable(false);
 176
 177        jLabel4.setText("Roaming");
 178
 179        jLabel5.setText("Carrying Food");
 180
 181        txtNumberOfAntsCarryingFood.setEditable(false);
 182
 183        txtNumberOfAnts.setEditable(false);
 184
 185        txtTotalFood.setEditable(false);
 186
 187        jLabel7.setText("Food");
 188
 189        jLabel8.setText("Total");
 190
 191        jLabel9.setText("Collected");
 192
 193        txtCollectedFood.setEditable(false);
 194
 195        txtRemainingFood.setEditable(false);
 196
 197        jLabel10.setText("Remaining");
 198
 199        jLabel11.setText("Time Elapsed");
 200
 201        txtTime.setEditable(false);
 202
 203        lstAnts.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
 204        jScrollPane1.setViewportView(lstAnts);
 205
 206        btnPause.setText("Pause");
 207
 208        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
 209        getContentPane().setLayout(layout);
 210        layout.setHorizontalGroup(
 211            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 212            .add(layout.createSequentialGroup()
 213                .addContainerGap()
 214                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 93, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 215                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 216                    .add(layout.createSequentialGroup()
 217                        .add(40, 40, 40)
 218                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 219                            .add(layout.createSequentialGroup()
 220                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 221                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 222                                    .add(layout.createSequentialGroup()
 223                                        .add(41, 41, 41)
 224                                        .add(jLabel6, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
 225                                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 226                                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 227                                            .add(layout.createSequentialGroup()
 228                                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 229                                                    .add(txtNumberOfAntsInNest, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
 230                                                    .add(txtNumberOfAntsRoaming, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
 231                                                    .add(txtNumberOfAntsCarryingFood, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE))
 232                                                .add(25, 25, 25))
 233                                            .add(layout.createSequentialGroup()
 234                                                .add(txtNumberOfAnts, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 27, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 235                                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)))
 236                                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 237                                            .add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 36, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 238                                            .add(jLabel5)
 239                                            .add(jLabel4)
 240                                            .add(jLabel3))
 241                                        .add(391, 391, 391))
 242                                    .add(layout.createSequentialGroup()
 243                                        .add(53, 53, 53)
 244                                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 245                                            .add(jLabel1)
 246                                            .add(jLabel7))
 247                                        .add(506, 506, 506))))
 248                            .add(layout.createSequentialGroup()
 249                                .add(68, 68, 68)
 250                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 251                                    .add(layout.createSequentialGroup()
 252                                        .add(txtTotalFood, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 27, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 253                                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
 254                                    .add(layout.createSequentialGroup()
 255                                        .add(txtCollectedFood, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 27, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 256                                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
 257                                    .add(layout.createSequentialGroup()
 258                                        .add(txtRemainingFood, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 27, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 259                                        .add(25, 25, 25)))
 260                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 261                                    .add(jLabel9)
 262                                    .add(jLabel8)
 263                                    .add(jLabel10))
 264                                .add(414, 414, 414))))
 265                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
 266                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 267                        .add(btnPause)
 268                        .add(30, 30, 30)
 269                        .add(jLabel11)
 270                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 271                        .add(txtTime, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 69, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 272                        .add(178, 178, 178))))
 273        );
 274
 275        layout.linkSize(new java.awt.Component[] {txtNumberOfAntsCarryingFood, txtNumberOfAntsInNest, txtNumberOfAntsRoaming}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
 276
 277        layout.setVerticalGroup(
 278            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 279            .add(layout.createSequentialGroup()
 280                .addContainerGap()
 281                .add(jLabel1)
 282                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 283                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
 284                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 254, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 285                    .add(layout.createSequentialGroup()
 286                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 287                            .add(jLabel6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 17, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 288                            .add(layout.createSequentialGroup()
 289                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 290                                    .add(jLabel2)
 291                                    .add(txtNumberOfAnts, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
 292                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 293                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 294                                    .add(txtNumberOfAntsInNest, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 295                                    .add(jLabel3))
 296                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 297                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 298                                    .add(layout.createSequentialGroup()
 299                                        .add(txtNumberOfAntsRoaming, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 300                                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 301                                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 302                                            .add(txtNumberOfAntsCarryingFood, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 303                                            .add(jLabel5)))
 304                                    .add(jLabel4))
 305                                .add(10, 10, 10)
 306                                .add(jLabel7)))
 307                        .add(27, 27, 27)
 308                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 309                            .add(txtTotalFood, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 310                            .add(jLabel8))
 311                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 312                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 313                            .add(jLabel9)
 314                            .add(txtCollectedFood, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
 315                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 316                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 317                            .add(txtRemainingFood, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 318                            .add(jLabel10))
 319                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 320                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 321                            .add(jLabel11)
 322                            .add(txtTime, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 323                            .add(btnPause))))
 324                .addContainerGap(26, Short.MAX_VALUE))
 325        );
 326        pack();
 327    }// </editor-fold>//GEN-END:initComponents
 328    
 329    /**
 330     * @param args the command line arguments
 331     */
 332    public static void main(String...args) {
 333        java.awt.EventQueue.invokeLater(new Runnable() {
 334            public void run() {
 335                new AntControl().setVisible(true);
 336            }
 337        });
 338    }
 339
 340    public static AntControl getSingleton() {
 341        return singleton;
 342    }
 343
 344    public static void setSingleton(AntControl aSingleton) {
 345        singleton = aSingleton;
 346    }
 347
 348    public int getTotalAnts() {
 349        return totalAnts;
 350    }
 351
 352    public void setTotalAnts(int totalAnts) {
 353        this.totalAnts = totalAnts;
 354    }
 355
 356    public int getAntsInNest() {
 357        return antsInNest;
 358    }
 359
 360    public void setAntsInNest(int antsInNest) {
 361        this.antsInNest = antsInNest;
 362    }
 363
 364    public int getAntsRoaming() {
 365        return antsRoaming;
 366    }
 367
 368    public void setAntsRoaming(int antsRoaming) {
 369        this.antsRoaming = antsRoaming;
 370    }
 371
 372    public int getAntsCarryingFood() {
 373        return antsCarryingFood;
 374    }
 375
 376    public void setAntsCarryingFood(int antsCarryingFood) {
 377        this.antsCarryingFood = antsCarryingFood;
 378    }
 379
 380    public int getTotalFood() {
 381        return totalFood;
 382    }
 383
 384    public void setTotalFood(int totalFood) {
 385        this.totalFood = totalFood;
 386    }
 387
 388    public int getCollectedFood() {
 389        return collectedFood;
 390    }
 391
 392    public void setCollectedFood(int collectedFood) {
 393        this.collectedFood = collectedFood;
 394    }
 395
 396    public int getRemainingFood() {
 397        return remainingFood;
 398    }
 399
 400    public void setRemainingFood(int remainingFood) {
 401        this.remainingFood = remainingFood;
 402    }
 403    
 404    // Variables declaration - do not modify//GEN-BEGIN:variables
 405    private javax.swing.JButton btnPause;
 406    private javax.swing.JLabel jLabel1;
 407    private javax.swing.JLabel jLabel10;
 408    private javax.swing.JLabel jLabel11;
 409    private javax.swing.JLabel jLabel2;
 410    private javax.swing.JLabel jLabel3;
 411    private javax.swing.JLabel jLabel4;
 412    private javax.swing.JLabel jLabel5;
 413    private javax.swing.JLabel jLabel6;
 414    private javax.swing.JLabel jLabel7;
 415    private javax.swing.JLabel jLabel8;
 416    private javax.swing.JLabel jLabel9;
 417    private javax.swing.JScrollPane jScrollPane1;
 418    private javax.swing.JList lstAnts;
 419    private javax.swing.JTextField txtCollectedFood;
 420    private javax.swing.JTextField txtNumberOfAnts;
 421    private javax.swing.JTextField txtNumberOfAntsCarryingFood;
 422    private javax.swing.JTextField txtNumberOfAntsInNest;
 423    private javax.swing.JTextField txtNumberOfAntsRoaming;
 424    private javax.swing.JTextField txtRemainingFood;
 425    private javax.swing.JTextField txtTime;
 426    private javax.swing.JTextField txtTotalFood;
 427    // End of variables declaration//GEN-END:variables
 428    
 429}
 430

· AntControl.java ends ·

Generated by CHIP: Code Highlighting in PHP, version 2.7.0.