• TimeTestApplet2
    import java.applet.Applet;
    import java.awt.*;
    import java.awt.event.*;
    
    public class NewMineGame1 extends Applet implements Runnable,
    													 ActionListener,													  
    													 Device {
    	private	long firstClickTime;
    	private boolean doubleClick;
    	private Label timeDisp;
    	private Thread timerThread;
    	private int time;    
    
       	private static final int ROW = 8;
       	private static final int COL = 8;
       	private Button[][] buttonGrid;
       	private int[][] mineGrid;
       	private Panel minePanel;
    
       	public void init() {
       		
    	 doubleClick = false;	
    	 firstClickTime = 0;
    	 timeDisp=new Label("  0:0  ", Label.CENTER); 		
    	 time = 0;
          
         buttonGrid = new Button[ROW][COL];
         mineGrid = new int[ROW][COL];
         minePanel = new Panel();
    
         setLayout(new BorderLayout());
    
    	 timeDisp.setFont(new Font("Courier", Font.BOLD, 50));
    	 add("Center", timeDisp);
    
         minePanel.setLayout(new GridLayout(ROW,COL));
    
    
         for (int i = 0; i < buttonGrid.length; i++) 
           for (int j = 0; j < buttonGrid[0].length; j++) {
             mineGrid[i][j] = (Math.random() < 0.8 ? 0 : 1);
             buttonGrid[i][j] = new Button();
           }
    
         for (int i = 0; i < buttonGrid.length; i++) 
           for (int j = 0; j < buttonGrid[0].length; j++) {
             minePanel.add(buttonGrid[i][j]);
             buttonGrid[i][j].addActionListener(this);
           }
    
         for (int i = 0; i < buttonGrid.length; i++) 
           for (int j = 0; j < buttonGrid[0].length; j++) {
             minePanel.add(buttonGrid[i][j]);
             buttonGrid[i][j].addMouseListener(
    				new MouseAdapter() {
    				   public void  mouseClicked( MouseEvent e ) {
    					long clickTime = System.currentTimeMillis();
    					long clickInterval = clickTime - firstClickTime;
    					if (clickInterval < 300) {
    						doubleClick = true;
    						firstClickTime = 0;
    					} else {
    						doubleClick = false;
    						firstClickTime = clickTime;
    					}
    				   }   
    				}  
    	);
           }
    
    
          add(minePanel,BorderLayout.SOUTH);
       }
    
       public void actionPerformed(ActionEvent e){
       	
    	 for (int i = 0; i < buttonGrid.length; i++) 
           for (int j = 0; j < buttonGrid[0].length; j++) {
             if (e.getSource().equals(buttonGrid[i][j])) {
                if (mineGrid[i][j] == 1) {
                	if (! doubleClick){
                		buttonGrid[i][j].setLabel("die");
    			turnOff();
                	} else {
    					buttonGrid[i][j].setLabel("pd");             
                	}
                } else {
    				if (! doubleClick){
    					turnOn();
    					buttonGrid[i][j].setLabel(mineNum(i,j)+"");
    				} else {
    					buttonGrid[i][j].setLabel("nb");    
    					turnOff();         
    				}
                } 
    	 	 }
           }
       }
    
       public void run() {
    	   while (timerThread == Thread.currentThread()) {
    		   timeDisp.setText("" + time/600 + ":" + (time/10)%60);
    		   time++;
    		   try { Thread.sleep(50); } catch (Exception e) {};
    	   }
       }
        
       public void turnOff(){	
    	Thread t = timerThread;
    	if (t != null) {
    		timerThread = null;
    		try { t.join(); } catch (Exception e) {}
    	}
       }
    	
       public void turnOn() {
    
    	   timerThread = new Thread(this);
    	   timerThread.start();
       }
       
       private int mineNum(int x, int y){
       	
         if ((x == 0) && (y == 0))
            return mineGrid[x][y+1] + mineGrid[x+1][y+1] + mineGrid[x+1][y];
         else 
         if ((x == 0) && (y == buttonGrid[0].length-1))
            return mineGrid[x+1][y] + mineGrid[x][y-1] + mineGrid[x+1][y-1]; 
         else
         if (x == 0) 
            return mineGrid[x][y+1] + mineGrid[x+1][y+1] + mineGrid[x+1][y] +
                   mineGrid[x][y-1] + mineGrid[x+1][y-1]; 
         else 
         if ((y == 0) && (x == buttonGrid.length-1))
            return mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x-1][y];
         else 
         if (y == 0)
            return mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x+1][y+1] +
                   mineGrid[x-1][y] + mineGrid[x+1][y];
         else
         if ((x == buttonGrid.length-1) && (y == buttonGrid[0].length-1))
            return mineGrid[x-1][y] + mineGrid[x-1][y-1] + mineGrid[x][y-1];
         else 
         if (x == buttonGrid.length-1) 
            return mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x-1][y] +
                   mineGrid[x-1][y-1] + mineGrid[x][y-1];
         else 
         if (y == buttonGrid[0].length-1)
            return mineGrid[x-1][y] + mineGrid[x+1][y] + mineGrid[x-1][y-1] +
                   mineGrid[x][y-1] + mineGrid[x+1][y-1]; 
    
         return  mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x+1][y+1] +
                 mineGrid[x-1][y] + mineGrid[x+1][y] + mineGrid[x-1][y-1] +
                 mineGrid[x][y-1] + mineGrid[x+1][y-1]; 
       }
     }