Posted by:wqq0712
Posted on:2006-09-06 22:53
import java.awt.event.*;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class PictureMove extends JFrame
{
public PictureMove()
{
this.getContentPane().add(new MyPanel());
setTitle("用鼠标拖动图象");
setSize(400,400);
setVisible(true);
}
public static void main(String[] args)
{
new PictureMove();
}
}
class MyPanel extends JPanel implements MouseMotionListener,MouseListener
{
int x=0,y=0;
int dx=0,dy=0;
BufferedImage bimage1,bimage2;
boolean downState=false;
public MyPanel()
{
this.setBackground(Color.WHITE);
this.addMouseMotionListener(this);
this.addMouseListener(this);
//Image images=getToolkit().getImage("yyyy.jpg"); //问题所在!!!!!!!!
Image images=new ImageIcon("yyyy.jpg").getImage(); //我自己添加的!!!!!!
if(images.getWidth(this)==-1)
{
System.out.println("不能打开图象");
System.exit(-1);
}
bimage1=new BufferedImage(images.getWidth(this),images.getHeight(this),BufferedImage.TYPE_INT_ARG
;
bimage2=new BufferedImage(images.getWidth(this),images.getHeight(this),BufferedImage.TYPE_INT_ARG
;
Graphics2D g2D1=bimage1.createGraphics();
Graphics2D g2D2=bimage2.createGraphics();
g2D1.drawImage(images,0,0,this);
g2D2.drawImage(images,0,0,this);
g2D2.drawRect(1,1,images.getWidth(this)-3,images.getHeight(this)-3);
}
public void paintComponent(Graphics g)
{
super.paintComponent
;
Graphics2D g2D=(Graphics2D)g;
if(!downState)
g2D.drawImage(bimage1,x,y,this);
else
g2D.drawImage(bimage2,x,y,this);
}
public void mousePressed(MouseEvent e)
{
if(e.getX()>=x&&e.getX()=y&&e.getY()
{
downState=true;
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
dx=e.getX()-x;
dy=e.getY()-y;
repaint();
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseReleased(MouseEvent e)
{
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
downState=false;
repaint();
}
public void mouseMoved(MouseEvent e){}
public void mouseDragged(MouseEvent e)
{
if(downState)
{
x=e.getX()-dx;y=e.getY()-dy;
repaint();
}
}
}
上面这个程序 注释掉的那句是课本的原样~~可是我怎么运行都是:不能打开图象!
我自己写的那句 可以显示图片!!
我想知道具体那2句有什么区别呢?是否跟缓冲区有关系?希望高手帮忙详细解说~~或者指出我的错误之处!~谢谢~~
而下面这段程序 用Image im=new ImageIcon("yyyy.jpg").getImage(); 却有问题!为什么呢!
import java.awt.*;
import java.awt.event.*;
public class Pic extends Frame {
Image im;
static public void main(String args[])
{
Pic p = new Pic();
p.show();
}
public Pic()
{
super("Image Test");
//im = Toolkit.getDefaultToolkit().getImage("yyyy.jpg");
//im=this.getToolkit().getImage("yyyy.jpg");
im=new ImageIcon("yyyy.jpg").getImage();
setSize(400,400);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
dispose();
System.exit(0);
}
});
}
public void paint(Graphics g) {
g.drawImage(im, 0, 0, this);
}
}