DraggingImage.java
上传用户:njled888
上传日期:2007-01-07
资源大小:29k
文件大小:4k
源码类别:

游戏

开发平台:

Java

  1. /*
  2.  * @(#)DraggingImage.java Version 1.0 98/03/12
  3.  * 
  4.  * Copyright (c) 1998 by Huahai Yang
  5.  * 
  6.  * Use at your own risk. I do not guarantee the fitness of this 
  7.  * software for any purpose, and I do not accept responsibility for 
  8.  * any damage you do to yourself or others by using this software.
  9.  * This file may be distributed freely, provided its contents 
  10.  * are not tampered with in any way.
  11.  *
  12.  */
  13. import java.awt.*;
  14. /**
  15.  * a draggable image ( requires container to handle event )
  16.  */
  17. class DraggingImage
  18. {
  19.    Image image;
  20.    DraggingArea container;
  21.    DraggingSlot slot;  // a slot on the container for me to settle down
  22.    
  23.    boolean trueSizeKnown;
  24.    MediaTracker tracker;
  25.    
  26.    final int INITIAL_WIDTH = 1;
  27.    final int INITIAL_HEIGHT = 1;
  28.    
  29.    private int tmpWidth, tmpHeight;
  30.    
  31.    boolean draggable;
  32.    
  33.    int x;
  34.    int y;
  35.    int width;
  36.    int height;
  37.    
  38.    public DraggingImage(Image image, DraggingArea container)
  39.    {
  40.       this.image = image;
  41.       this.container = container;
  42.       draggable = true;
  43.       slot = null;
  44.       x = 0;
  45.       y = 0;
  46.       
  47.       width = tmpWidth  = INITIAL_WIDTH;
  48.       height = tmpHeight = INITIAL_HEIGHT;
  49.       tracker = new MediaTracker(container);
  50.       tracker.addImage(image, 0);
  51.    } // 2 param constructor
  52.    
  53.    public DraggingImage(int x, int y, Image image, DraggingArea container)
  54.    {
  55.       this.image = image;
  56.       this.container = container;
  57.       
  58.       draggable = true;
  59.       slot = null;
  60.       this.x = x;
  61.       this.y = y;
  62.       
  63.       width = tmpWidth  = INITIAL_WIDTH;
  64.       height = tmpHeight = INITIAL_HEIGHT;
  65.       tracker = new MediaTracker(container);
  66.       tracker.addImage(image, 0);
  67.    } // 4 param constructor
  68.    
  69.    
  70.    public Point getLocation ()
  71.    {
  72.       return new Point(x, y);
  73.    } // getLocation   
  74.    
  75.    public void setLocation ( int x, int y )
  76.    {
  77.       this.x = x;
  78.       this.y = y;
  79.    } // setLocation   
  80.    
  81.    public void centerAt ( int centerX, int centerY )
  82.    {
  83.       x = centerX - width / 2;
  84.       y = centerY - height / 2;
  85.    } // centerAt   
  86.    
  87.    public Dimension getSize ()
  88.    {
  89.       return new Dimension(width, height);
  90.    } // getSize
  91.    
  92.    public void setSize ( int width, int height )
  93.    {
  94.       this.width = width;
  95.       this.height = height;
  96.    } // setSize   
  97.    public boolean contains ( int xp, int yp )
  98.    {
  99.       return (xp >= x) && (xp < x + width) 
  100.              && (yp >= y) && (yp < y + height);
  101.    } // contains
  102.    
  103.    public void enableDrag()
  104.    {
  105.       draggable = true;
  106.    } // enableDrag
  107.    
  108.    public void disableDrag()
  109.    {
  110.       draggable = false;
  111.    } // disableDrag
  112.    
  113.    public boolean isDraggable()
  114.    {
  115.       return draggable;
  116.    } //isDraggable
  117.    
  118.    public void settle(DraggingSlot slot)
  119.    {
  120.       this.slot = slot;
  121.    } // settleDown
  122.    
  123.    public void unsettle()
  124.    {
  125.       slot = null;
  126.    } // unsettle
  127.    
  128.    public boolean isSettled()
  129.    {
  130.       return slot != null;
  131.    } // isSettled   
  132.    
  133.    public DraggingSlot getSlot()
  134.    {
  135.       return slot;
  136.    } // getSlot
  137.    
  138.    public Dimension getPreferredSize() 
  139.    {
  140.       return getMinimumSize();
  141.    } // getPreferredSize
  142.    public Dimension getMinimumSize() 
  143.    {
  144.       return new Dimension(width, height);
  145.    } // getMinimumSize
  146.    public void paint (Graphics g) 
  147.    {
  148.       setSize(tmpWidth, tmpHeight);
  149.       
  150.       if (image != null) 
  151.       {
  152.          if (!trueSizeKnown) 
  153.          {
  154.             int imageWidth = image.getWidth(container);
  155.             int imageHeight = image.getHeight(container);
  156.             if (tracker.checkAll(true)) 
  157.             {
  158.                trueSizeKnown = true;
  159.                if (tracker.isErrorAny()) 
  160.                {
  161.                   System.err.println("Error loading image: " + image);
  162.                } // if is ErrorAny
  163.             } // if checkAll
  164.             if (((imageWidth > 0) && (tmpWidth != imageWidth)) ||
  165.                ((imageHeight > 0) && (tmpHeight != imageHeight))) 
  166.             {
  167.                tmpWidth = imageWidth;
  168.                tmpHeight = imageHeight;
  169.                setSize(tmpWidth, tmpHeight);
  170.                container.validate();
  171.             } // if 
  172.          } // if trueSize not Known
  173.       } // if has image
  174.       
  175.       g.drawImage(image, x, y, container);
  176.       g.drawRect(x, y, width - 1, height - 1);
  177.    } // paint
  178. } // DraggingImage