Вступление
Примеры | Словарь |Вопросы
Sun Microsystems

Примеры программирования на Java

Прорисовка изображения
(replace.java)

Описание апплета
Пример работы апплета
import java.awt.*;
import java.applet.*;

//----------------------------

public class replace extends Applet implements Runnable
	
	{
	     Graphics g;
	     
	     Image ImageBlack; //  Переменные для хранения изображения  
	     Image ImageColor; // картинки: черно-белого и цветного
	     
	     int width;
	     int height;
	     
	     boolean load_image = false;
	     
	     int delay1 = 100; // Значение задержки по умолчанию

//--------------------------------
	     
	public void init()
	
	{
		
		g = getGraphics();
		
	//  Определение ширины и высоты окна аплета
		width = size().width;
		height = size().height;
		
	// Считывание параметров из файла black.html.
	// Если параметры не заданы, то берется значение по умолчанию 	
	 String parameter = getParameter("delay");
	 if (parameter != null)
	 	delay1 = Integer.parseInt(parameter);
	
	// Получение изображения  из файлов 	
	 ImageBlack = getImage(getCodeBase(), "b.gif");
	 ImageColor = getImage(getCodeBase(), "p.gif");
	
	 // сначало создается изображение вне экрана ( createImage), а
	 // затем выводится на экран функцией drawImage.
	   
	 Image offScrImage = createImage(width, height);
	 Graphics offScrGC = offScrImage.getGraphics();
	 offScrGC.drawImage(ImageBlack, 0, 0, width, height, this);
	}
//===============================================
 //  Для задания потока  аплет создает экземпляр класса Thread
 //  и вызывает функцию start
	public void start()
	  {
	    (new Thread(this)).start();
	  }
//================================================
  // Организация задержки
	void delay()
	  {
	    try
	      {
	      Thread.sleep(delay1);
	      }
	      catch (InterruptedException e)
	    {
	    }  
	      
	  }
	   
//================================================

	public void run()
	  {
	     while (!load_image) // Ожидание загрузки фонового изображения. 
	     			// Только после этого продолжится работа.   
	  

	while (true) // Бесконечный цикл
	 {
	     // После каждого прохода цикла  функция создает новый 
	     // графический контекст, так как после каждого прохода
	     // цикла изменяется прямоугольник отсечения
	     
	     for (int x = 0; x < width; x++)
	     
	       { 
	         Graphics g2 = g.create();
	         g2.clipRect (0,0,x,height);// Задание прямоугольника
	         			     // отсечения
	         g2.drawImage (ImageColor, 0, 0, width, height, this);
	         delay();
	       }
	       
	    for ( int x = width-1; x>= 0; x--)
	      
	       {
	         Graphics g2 = g.create();
	         Graphics g3 = g.create();
	         
	         g2.clipRect (x,0,1,height); // Задание прямоугольника
	         			     // отсечения
	         g2.drawImage (ImageBlack, 0, 0, width, height, this);
	        
	         g3.clipRect (0,0,x,height);// Задание прямоугольника
	         			     // отсечения	         
	         g3.drawImage (ImageColor, 0, 0, width, height, this);
	         
	         delay();	   
   		}
  	 }
   	}
   	
//===================================================

	public boolean imageUpdate ( Image img, int infoflags, int x, int y,
					int w, int h)
	   {
	      // Пока фоновое изображение загружается, параметр
	      // infoflags не равен ALLBITS. Переменная done_loading_image
	      // равна false, и в строке статуса Вы видите Loading
	       if (infoflags == ALLBITS)
	        {
	          load_image = true;
	          repaint();
	          
	          return false;
	        }
	      else 
	         return true;
	   }
	   
//======================================================

	public void paint (Graphics _g)
	  
	  {
	     if (!load_image)
	       showStatus ("Loading");
	       
	     else
	       {
	         width = size().width;
	         height = size().height;
	         showStatus ("Applet started");
	         g.drawImage (ImageBlack, 0, 0, width, height, this);
	       }
	    }
	    
}