Swing 中的参数错误
花花更健康 2017-07-03 08:16:26 package MyPicture;
import java.applet.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.*;
import javax.swing.*;
public class MyPicture extends Applet {
Image myPicture;
int infoFlg;
/*
* init()方法中,先定义一个 Image 对象,并赋予 createImage()方法的返回值,接着创建 Graphics 对象并赋予其图
* 形环境。最后,让 Graphics 对象调用 drawImage()方法显示图像。 由于这里的 Graphics 对象 offScreenGc
* 是非屏幕对象是,小程序窗口不会有图像显示
*/
public void init() {
myPicture = getImage(getCodeBase(), "myPic.JPG");
Image offScreenImage = createImage(size().width, size().height);
Graphics offScreenGc = offScreenImage.getGraphics();
new BufferedDemo(myPicture);
}
/*
* drawImage()方法的第四个参数是实现ImageObserver接口,在init()方法中,
* 调用drawImage()方法的参数是this,所以小程序要定义 imageUpdate()方法
*/
public boolean imageUpdate(Image img, int infoFlg, int x, int y, int w,
int h) {
if (infoFlg == ALLBITS)// 表示图像已全部装入内存
{
repaint();
return false;// 防止线程再次调用 imageUpdate()方法
} else
return true;
}
}//imageUpdate图像已经改变时重绘次组件
class BufferedDemo extends JFrame {
public BufferedDemo(Image img) {
super();
this.getContentPane().add(new PicPanel(img));
setSize(300, 300);
setVisible(true);
}
}
class PicPanel extends JPanel implements MouseListener, MouseMotionListener {
int x = 0, y = 0, dx = 0, dy = 0;
BufferedImage bimg1, bimg2;
boolean upstate = true;
public PicPanel(Image img) {
this.setBackground(Color.white);
this.addMouseListener(this);
this.addMouseMotionListener(this);
bimg1 = new BufferedImage(img.getWidth(this), img.getHeight(this),
BufferedImage.TYPE_INT_ARGB);//表示一个图像,它具有合成整数像素的8位RGBA颜色分量//
//BufferedImage.TYPE_INT_ARGB所创建图像的类型
bimg2 = new BufferedImage(img.getWidth(this), img.getHeight(this),
BufferedImage.TYPE_INT_ARGB);
//BufferedImage子类描述具有可访问图像数据缓冲区的Image;
Graphics2D g2D1 = bimg1.createGraphics();
Graphics2D g2D2 = bimg2.createGraphics();
//创建一个Graphics2D可以将它绘制到此BufferedImage中
g2D1.drawImage(img, 0, 0, this);
g2D2.drawImage(img, 0, 0, this);
g2D2.drawRect(1, 1, img.getWidth(this) - 3, img.getHeight(this) - 3);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);//绘制此组件
Graphics2D g2D = (Graphics2D) g;
if (upstate)
g2D.drawImage(bimg1, x, y, this);
else
g2D.drawImage(bimg2,x, y, this);
}
public void mousePress(MouseEvent e) {
if (e.getX() >= x && e.getX() < x + bimg1.getWidth(this)
&& e.getY() >= y && e.getY() < y + bimg1.getHeight(this)) {
upstate = false;
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//手状光标
//setCursor()为指定的光标设置光标图像//Cursor封装鼠标光标的位图表示形式的类
//返回一个具有指定预定义类型的光标对象
dx = e.getX() - x;
dy = e.getY() - y;
repaint();
}
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void MouseReleased(MouseEvent e) {
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));//默认光标类型
upstate = true;
repaint();
}
public void mouseMoved(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
if (!upstate) {
x = e.getX() - dx;
y = e.getY() - dy;
repaint();
}
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
eclipse说我参数错误?!求解!