wqq0712
发贴: 26
积分: 0
|
于 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()<x+bimage1.getWidth(this)&&e.getY()>=y&&e.getY()<y+bimage1.getHeight(this)) { 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); } }
|