Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Исходный текст программы Rectangles.java

Оглавление

Назад

// ==========================================
// Rectangles.java
//(C) Alexandr Frolov, 1998
// E-mail: frolov@glasnet.ru
// Web:    http://www.glasnet.ru/~frolov 
// ==========================================
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Rectangles extends Applet 
{
  RectPanel[] rp;
  
  // ============================================
  // init
  // ============================================
  public void init()
  {
    setLayout(new GridLayout(0, 3));
    
    rp = new RectPanel[9];
    
    for(int i = 0; i < 9; i++)
    {
      rp[i] = new RectPanel();
      add(rp[i]);
    }
  }
  
  // ============================================
  // getAppletInfo
  // ============================================
  public String getAppletInfo()
  {
    return "Name: Rectangles";
  }
      
  // ============================================
  // start
  // ============================================
  public void start()
  {
    for(int i = 0; i < 9; i++)
      rp[i].startThread();
  }

  // ============================================
  // stop
  // ============================================
  public void stop()
  {
    for(int i = 0; i < 9; i++)
      rp[i].stopThread();
  }
}

// ===========================================
// Class RectPanel
// ===========================================
class RectPanel extends Panel
  implements Runnable, MouseListener

{
  Dimension dm;
  Thread tiktak = null;
  
  // ===========================================
  // RectPanel
  // ===========================================
  public RectPanel()
  {
    tiktak = null;
    this.addMouseListener(this);
  }
  
  // ===========================================
  // paint
  // ===========================================
  public void paint(Graphics g)
  {
    dm = getSize();
    g.drawRect(
      0, 0, dm.width - 1, dm.height - 1);
  }
  
  // ===========================================
  // startThread
  // ===========================================
  public void startThread()
  {
    if(tiktak == null)
    {
      tiktak = new Thread(this);
      tiktak.start();
    }
  }
  
  // ===========================================
  // stopThread
  // ===========================================
  public void stopThread()
  {
    if(tiktak != null)
    {
      tiktak.stop();
      tiktak = null;
    }
  }
  
  // ===========================================
  // run
  // ===========================================
  public void run()
  {
    Graphics g = getGraphics();
    int rColor, gColor, bColor;
    int x, y, width, height;

    while(true)
    {
      if(dm != null)
      {
        x = (int)((dm.width + 1) * 
          Math.random());
        y = (int)((dm.height + 1) * 
          Math.random());
      
        width = (int)((dm.width - 2) * 
          Math.random()) / 2;
	height = (int)((dm.height - 2)* 
          Math.random()) / 2;
      
        rColor = (int)(255 * Math.random());
        gColor = (int)(255 * Math.random());
        bColor = (int)(255 * Math.random());
      
        g.setColor(
           new Color(rColor, gColor, bColor));
        g.fillRect(x, y, width, height);
      }	
      
      try
      {
	tiktak.sleep(10);
      }
      catch(InterruptedException ie)
      {
	tiktak.stop();
      }	
    }
  }
  
  // ============================================
  // mousePressed
  // ============================================
  public void mousePressed(MouseEvent e)
  {
    if(tiktak != null)
    {
      tiktak.stop();
      tiktak = null;
    }
  }

  // ============================================
  // mouseReleased
  // ============================================
  public void mouseReleased(MouseEvent e)
  {
    if(tiktak == null)
    {
      tiktak = new Thread(this);
      tiktak.start();
    }
  }
  
  // ============================================
  // mouseClicked
  // ============================================
  public void mouseClicked(MouseEvent e)
  {
  }
  
  // ============================================
  // mouseEntered
  // ============================================
  public void mouseEntered(MouseEvent e)
  {
    if(tiktak != null)
    {
      tiktak.setPriority(Thread.MIN_PRIORITY);
    }  
  }
  
  // ============================================
  // mouseExited
  // ============================================
  public void mouseExited(MouseEvent e)
  {
    if(tiktak != null)
    {
      tiktak.setPriority(Thread.NORM_PRIORITY);
    }  
  }
}

[Назад]