import java.awt.*;
import java.awt.image.*;
import java.applet.*;
import java.awt.event.*;
public class DragImage extends Applet
{
public void init()
{
Image img = getImage(getCodeBase(),"test3.jpg");
MediaTracker tracker;
tracker = new MediaTracker(this);
tracker.addImage(img, 0);
ImagePanel ip=new ImagePanel();
ip.img = img;
setLayout(new BorderLayout());
add(ip,BorderLayout.CENTER);
}
}class ImagePanel extends Panel implements MouseMotionListener,MouseListener
{
Image img;
Point p;
Point lastpos;
boolean isDrag=false;
public ImagePanel()
{
addMouseListener(this);
addMouseMotionListener(this);
lastpos=new Point();
p=new Point();
}
public void paint(Graphics g)
{
g.fillRect(0,0,getWidth(),getHeight());
if(img!=null)
g.drawImage(img,p.x,p.y,this);
g.setColor(Color.red);
g.drawString("Mouse press inside the image to drag",0,120);
}
public void update(Graphics g)
{
paint(g);
} public void mouseClicked(MouseEvent e)
{ }
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{
lastpos = e.getPoint();
isDrag=isMouseInsideImage(lastpos);
repaint();
}
public void mouseReleased(MouseEvent e)
{}
public void mouseMoved(MouseEvent e)
{ }
public void mouseDragged(MouseEvent e)
{ Point newpos =e.getPoint();
if(isDrag)
{
p.x = p.x+newpos.x-lastpos.x;
p.y = p.y+newpos.y-lastpos.y;
lastpos = newpos;
repaint();
}
}
protected boolean isMouseInsideImage(Point pos)
{
int width =img.getWidth(null);
int height =img.getHeight(null);
Rectangle rect=new Rectangle(p.x,p.y,width,height);
return rect.contains(pos);
}}
import java.awt.image.*;
import java.applet.*;
import java.awt.event.*;
public class DragImage extends Applet
{
public void init()
{
Image img = getImage(getCodeBase(),"test3.jpg");
MediaTracker tracker;
tracker = new MediaTracker(this);
tracker.addImage(img, 0);
ImagePanel ip=new ImagePanel();
ip.img = img;
setLayout(new BorderLayout());
add(ip,BorderLayout.CENTER);
}
}class ImagePanel extends Panel implements MouseMotionListener,MouseListener
{
Image img;
Point p;
Point lastpos;
boolean isDrag=false;
public ImagePanel()
{
addMouseListener(this);
addMouseMotionListener(this);
lastpos=new Point();
p=new Point();
}
public void paint(Graphics g)
{
g.fillRect(0,0,getWidth(),getHeight());
if(img!=null)
g.drawImage(img,p.x,p.y,this);
g.setColor(Color.red);
g.drawString("Mouse press inside the image to drag",0,120);
}
public void update(Graphics g)
{
paint(g);
} public void mouseClicked(MouseEvent e)
{ }
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{
lastpos = e.getPoint();
isDrag=isMouseInsideImage(lastpos);
repaint();
}
public void mouseReleased(MouseEvent e)
{}
public void mouseMoved(MouseEvent e)
{ }
public void mouseDragged(MouseEvent e)
{ Point newpos =e.getPoint();
if(isDrag)
{
p.x = p.x+newpos.x-lastpos.x;
p.y = p.y+newpos.y-lastpos.y;
lastpos = newpos;
repaint();
}
}
protected boolean isMouseInsideImage(Point pos)
{
int width =img.getWidth(null);
int height =img.getHeight(null);
Rectangle rect=new Rectangle(p.x,p.y,width,height);
return rect.contains(pos);
}}
控制两个层上的两个图片的拖动。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Test extends JApplet {
public void init() {
setContentPane(new CustomContentPane());
}
}
class CustomContentPane extends JLayeredPane {
private ImageIcon rain = new ImageIcon("rain.gif");
private ImageIcon punch = new ImageIcon("punch.gif");
private ImageIcon skelly = new ImageIcon("skelly.gif");
private int rainw = rain.getIconWidth();
private int rainh = rain.getIconHeight(); private JLabel[] labels = {
new JLabel("I stay put", punch, SwingConstants.RIGHT),
new JLabel("Drag me around!",
skelly, SwingConstants.RIGHT),
}; public CustomContentPane() {
Dragger listener = new Dragger();
JCheckBox onDragLayer = new JCheckBox("Drag Layer"); // JLayeredPane has a null layout by default
setLayout(new FlowLayout()); onDragLayer.setOpaque(false); add(onDragLayer);
add(labels[0]);
add(labels[1]); labels[1].addMouseMotionListener(listener);
labels[1].addMouseListener(listener); setLabelText(); onDragLayer.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
setLayer(labels[1],
JLayeredPane.DRAG_LAYER.intValue());
}
else {
setLayer(labels[1],
JLayeredPane.DEFAULT_LAYER.intValue());
}
setLabelText();
validate();
}
});
}
public void paintComponent(Graphics g) {
Dimension size = getSize(); for(int row=0; row < size.height; row += rainh)
for(int col=0; col < size.width; col += rainw)
rain.paintIcon(this,g,col,row);
}
private void setLabelText() {
for(int i=0; i < labels.length; ++i) {
JLabel label = labels[i];
String t = new String("Layer: "); t += "(" + getLayer(label) + "),";
t += " Index: " + getIndexOf(label); label.setText(t);
}
}
}
class Dragger extends MouseAdapter
implements MouseMotionListener {
Point press = new Point();
boolean dragging = false; public void mousePressed(MouseEvent event) {
press.x = event.getX();
press.y = event.getY();
dragging = true;
}
public boolean isDragging() {
return dragging;
}
public void mouseReleased(MouseEvent event) {
dragging = false;
}
public void mouseClicked(MouseEvent event) {
dragging = false;
}
public void mouseMoved(MouseEvent event) {
// don't care
}
public void mouseDragged(MouseEvent event) {
Component c = (Component)event.getSource(); if(dragging) {
Point loc = c.getLocation();
Point pt = new Point();
pt.x = event.getX() + loc.x - press.x;
pt.y = event.getY() + loc.y - press.y;
c.setLocation(pt.x, pt.y);
c.getParent().repaint();
}
}
}推荐你看一下《Java2图形设计 卷1:awt》和《Java2图形设计 卷2:swing》