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

Sun Microsystems

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

Увеличительное стекло
(magnify.java)

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



public class magnify extends Applet 
  
  {
    
     Graphics g;
    
     Image background; // Фоновая картинка
     Color bgColor;  // Цвет фона
  
     boolean done_loading = false;
    
     int windowX = 0; // Размеры квадрата увеличения
     int windowY = 0;
     int Width = 100;
     int Height = 100;
     
        
     int width; // Данные переменные хранят ширину и
     int height; //  высоту фонового изображения 
	

//=====================================================================

	public void init()
 	{
 	  
 	   g = getGraphics(); // Переменная для хранения графического 
 	   			// контекста
 	   
 	   bgColor = new Color(255,255,255);
 	   setBackground(bgColor);
 	   
 	   // Получение изображения для фона
 	   background = getImage(getCodeBase(), "post1.jpg");
 	   
 	   width = size().width;
 	   height = size().height;
 	   
 	   // Создается изображение вне экрана (createImage), а
	   // затем выводится на экран функцией drawImage.
	   Image offScrImage = createImage(width, height);
 	   Graphics offScrGC = offScrImage.getGraphics();
	   offScrGC.drawImage(background, 0, 0, this);
	} 
 

	


//========================================================
public boolean mouseMove(Event evt, int x, int y)
	{
 	  erase_window(); // Перед прорисовкой нового окна надо удалить 
 	                  // предыдущее
 	  
 	  windowX = x; // Сохранение новых координат с целью 
 	  windowY = y; //  уничтожения следующего увеличительного окна
 	 
 	 // Обеспечение целостности (предотвращение выхода из окна)
 	  if (windowX > width)
 	  windowX = width;
 	
 	  if (windowY > height)
 	  windowY = height;
 	  	  
 	 // Прорисовка увеличенного изображения
 	  draw_window();
 	  
 	 return true;
 	 } 

//=========================================================

 void draw_window()
 
    {
       Graphics g2;
     g2 = g.create();
     
     // clipRect создает  прямоугольник отсечения с размерами 
     // увеличительного окна
     g2.clipRect(windowX, windowY, Width, Height);
     
     g2.drawImage(background, -windowX-Width/2, -windowY-Height/2, width*2, height*2, null);
     
    //Прорисовка границ "увеличительного стекла"
     g.setColor(Color.red);
     
     g.drawRect(windowX, windowY, Width-1, Height-1);
     setBackground(bgColor);
    }   
//============================================================
 void erase_window() // Удаление предыдущего окна
    		     // и восстановление фона
     {
     Graphics g2;
     g2 = g.create();
     
     g2.clipRect(windowX, windowY, Width, Height);
     
     g2.drawImage(background, Width/2, Height/2,  null);
     
     if ( windowX < Width/2)
       {
        g.setColor(Color.white);
        g.fillRect( 0, 0, Width/2, height + Height);
       }
      
      if ( windowY < Height/2)
       {
        g.setColor(Color.white);
        g.fillRect( 0, 0, width + Width, Height/2);
       }  
     
     if ( windowX > (width - Width/2))
       {
        g.setColor(Color.white);
        g.fillRect( width + Width/2, 0, Width/2, height + Height);
       }
      
      if ( windowY > (height - Height))
       {
        g.setColor(Color.white);
        g.fillRect( 0, height + Height/2, width + Width, Height/2);
       } 
       
      } 
       

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

public void paint (Graphics _g)
	  
     {
	     if (!done_loading)
	       showStatus ("Loading");
	  else     
	{
	showStatus ("OK");
	g.drawImage (background, Width/2, Height/2, this);
        draw_window();
         }
      } 
   
 	   
//==============================================
 }