📄 draggingimage.java
字号:
/*
* @(#)DraggingImage.java Version 1.0 98/03/12
*
* Copyright (c) 1998 by Huahai Yang
*
* Use at your own risk. I do not guarantee the fitness of this
* software for any purpose, and I do not accept responsibility for
* any damage you do to yourself or others by using this software.
* This file may be distributed freely, provided its contents
* are not tampered with in any way.
*
*/
import java.awt.*;
/**
* a draggable image ( requires container to handle event )
*/
class DraggingImage
{
Image image;
DraggingArea container;
DraggingSlot slot; // a slot on the container for me to settle down
boolean trueSizeKnown;
MediaTracker tracker;
final int INITIAL_WIDTH = 1;
final int INITIAL_HEIGHT = 1;
private int tmpWidth, tmpHeight;
boolean draggable;
int x;
int y;
int width;
int height;
public DraggingImage(Image image, DraggingArea container)
{
this.image = image;
this.container = container;
draggable = true;
slot = null;
x = 0;
y = 0;
width = tmpWidth = INITIAL_WIDTH;
height = tmpHeight = INITIAL_HEIGHT;
tracker = new MediaTracker(container);
tracker.addImage(image, 0);
} // 2 param constructor
public DraggingImage(int x, int y, Image image, DraggingArea container)
{
this.image = image;
this.container = container;
draggable = true;
slot = null;
this.x = x;
this.y = y;
width = tmpWidth = INITIAL_WIDTH;
height = tmpHeight = INITIAL_HEIGHT;
tracker = new MediaTracker(container);
tracker.addImage(image, 0);
} // 4 param constructor
public Point getLocation ()
{
return new Point(x, y);
} // getLocation
public void setLocation ( int x, int y )
{
this.x = x;
this.y = y;
} // setLocation
public void centerAt ( int centerX, int centerY )
{
x = centerX - width / 2;
y = centerY - height / 2;
} // centerAt
public Dimension getSize ()
{
return new Dimension(width, height);
} // getSize
public void setSize ( int width, int height )
{
this.width = width;
this.height = height;
} // setSize
public boolean contains ( int xp, int yp )
{
return (xp >= x) && (xp < x + width)
&& (yp >= y) && (yp < y + height);
} // contains
public void enableDrag()
{
draggable = true;
} // enableDrag
public void disableDrag()
{
draggable = false;
} // disableDrag
public boolean isDraggable()
{
return draggable;
} //isDraggable
public void settle(DraggingSlot slot)
{
this.slot = slot;
} // settleDown
public void unsettle()
{
slot = null;
} // unsettle
public boolean isSettled()
{
return slot != null;
} // isSettled
public DraggingSlot getSlot()
{
return slot;
} // getSlot
public Dimension getPreferredSize()
{
return getMinimumSize();
} // getPreferredSize
public Dimension getMinimumSize()
{
return new Dimension(width, height);
} // getMinimumSize
public void paint (Graphics g)
{
setSize(tmpWidth, tmpHeight);
if (image != null)
{
if (!trueSizeKnown)
{
int imageWidth = image.getWidth(container);
int imageHeight = image.getHeight(container);
if (tracker.checkAll(true))
{
trueSizeKnown = true;
if (tracker.isErrorAny())
{
System.err.println("Error loading image: " + image);
} // if is ErrorAny
} // if checkAll
if (((imageWidth > 0) && (tmpWidth != imageWidth)) ||
((imageHeight > 0) && (tmpHeight != imageHeight)))
{
tmpWidth = imageWidth;
tmpHeight = imageHeight;
setSize(tmpWidth, tmpHeight);
container.validate();
} // if
} // if trueSize not Known
} // if has image
g.drawImage(image, x, y, container);
g.drawRect(x, y, width - 1, height - 1);
} // paint
} // DraggingImage
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -