效果如下图:
import java.applet.Applet;
import java.awt.BasicStroke;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.FlowLayout;import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Label;
import java.awt.MediaTracker;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
public class DrawImage extends Applet implements ItemListener , MouseListener ,
MouseMotionListener , ActionListener
{
private static final long serialVersionUID = 1L;
int count = 8; //装载图片的数量
Vector<Vector<Object>> v = new Vector<Vector<Object>>(); //存储绘图信息
Image[] img = new Image[count];
int myWidth = 0; //箭头起点坐标
int myHeight = 0; //箭头起点坐标
int widthcount = 0; //工具栏上图标之间隔
//boolean[] b = new boolean[count];
int[] width = new int[count];
int[] height = new int[count];
int[] w = new int[count];
int[] h = new int[count];
int[] wid = new int[count];
int[] hei = new int[count];
int[] ww = new int[count];
int[] hh = new int[count];
int startX = 0;
int startY = 0;
int endX = 0;
int endY = 0;
int clickX = 0; //点击动态图标时的X坐标
int clickY = 0; //点击动态图标时的Y坐标
int moveX = 0; //拖动动态图标时的X坐标
int moveY = 0; //拖动动态图标时的Y坐标
canvas[] can = null; //动态图标数组
myCanvas[] mycan = new myCanvas[count]; //动态图标数组
Canvas curcan = null; //当前获得焦点的图标
Canvas curdelcan = null; //需要删除的当前图标
Image curimg = null; //当前焦点图标的图象
JPanel jp = new JPanel(null); //图像工具条面板
MediaTracker mt = new MediaTracker(this); //媒体对象,用于装载图象到内存
PopupMenu popMenu2 = new PopupMenu(); //右键菜单
MenuItem menuItem1 = null;
MenuItem menuItem2 = null;
// MenuItem menuItem3 = null;
MenuItem menuItem4 = null;
MenuItem menuItem5 = null;
int x = -1;
int y = -1;
int con = 1; // 画笔大小
int Econ = 5; // 橡皮大小
int toolFlag = 0; //工具标记
// toolFlag工具对应表:
// (0--画笔);(1--橡皮);(2--清除);
// (3--直线);(4--圆);(5--矩形);
Color c = new Color(0, 0, 0); // 画笔颜色
BasicStroke size = new BasicStroke(this.con, 0, 2); // 画笔粗细
Point cutflag = new Point(-1, -1, this.c, 6, this.con); // 截断标志
Vector<Point> paintInfo = null; // 点信息向量组
int n = 1;
FileInputStream picIn = null;
FileOutputStream picOut = null;
ObjectInputStream VIn = null;
ObjectOutputStream VOut = null;
Panel toolPanel;
Button eraser;
Button drLine;
Button drCircle;
Button drRect;
Button clear;
Button pen;
Choice ColChoice;
Choice SizeChoice;
Choice EraserChoice;
Button colchooser;
Label 颜色;
Label 大小B;
Label 大小E;
Button openPic;
Button savePic;
// FileDialog openPicture;
BufferedImage bi = null;
Graphics2D g2d = null;
public void init()
{
// int width2 = Toolkit.getDefaultToolkit().getScreenSize().width; // 屏幕的宽
// int height2 = Toolkit.getDefaultToolkit().getScreenSize().height; // 屏蔽的高
//
// this.bi = new BufferedImage(width2, height2, 1);
this.bi = new BufferedImage(1280, 800, 1); //内存中创建指定大小的绘图区域
this.img[0] = getImage(getCodeBase(), "1.png");
this.img[1] = getImage(getCodeBase(), "2.png");
this.img[2] = getImage(getCodeBase(), "3.png");
this.img[3] = getImage(getCodeBase(), "4.png");
this.img[4] = getImage(getCodeBase(), "5.png");
this.img[5] = getImage(getCodeBase(), "6.png");
this.img[6] = getImage(getCodeBase(), "7.png");
this.img[7] = getImage(getCodeBase(), "8.png");
resize(800, 600); //设置applet的尺寸,在浏览器里浏览根据html代码来设置
setLayout(null); //设置布局管理器,因为要移动图标的位置,因此设置为null
for (int i = 0; i < this.img.length; ++i)
{
this.mt.addImage(this.img[i], 0);
}
try
{
this.mt.waitForAll();
}
catch (Exception ex)
{
System.err.println(ex.toString());
}
add(this.jp);
this.jp.setBounds(0, 0, 800, 80);
//---------------绘制图像工具条------------------------------------------
for (int i = 0; i < this.img.length; ++i)
{
this.mycan[i] = new myCanvas(this.img[i]);
this.width[i] = this.img[i].getWidth(this);
this.height[i] = this.img[i].getHeight(this);
this.jp.add(this.mycan[i]);
this.mycan[i].setBounds(100 + 5 * (i + 1) + this.widthcount, 5,
this.img[i].getWidth(this), this.img[i].getHeight(this));
this.widthcount += this.img[i].getWidth(this);
}
//---------------绘制图像工具条--------结束--------------------------------
// ---------------加载右键菜单-----------------------------
this.menuItem1 = new MenuItem("隐藏图像工具栏");
this.menuItem2 = new MenuItem("显示图像工具栏");
// this.menuItem3 = new MenuItem("清空画面");
this.menuItem4 = new MenuItem("显示绘图工具栏");
this.menuItem5 = new MenuItem("隐藏绘图工具栏");
this.popMenu2.add(this.menuItem1);
this.popMenu2.add(this.menuItem2);
// this.popMenu2.add(this.menuItem3);
this.popMenu2.addSeparator();
this.popMenu2.add(this.menuItem4);
this.popMenu2.add(this.menuItem5);
add(this.popMenu2);
this.menuItem1.addActionListener(this);
this.menuItem2.addActionListener(this);
// this.menuItem3.addActionListener(this);
this.menuItem4.addActionListener(this);
this.menuItem5.addActionListener(this);
// ---------------加载右键菜单------结束---------------------
// -----------------菜单条--------------------------------------
this.toolPanel = new Panel(null); //菜单条面板
this.toolPanel.setLayout(new FlowLayout());
this.paintInfo = new Vector<Point>();
this.ColChoice = new Choice(); // 画笔颜色选择下拉列表框
this.ColChoice.add("黑色");
this.ColChoice.add("红色");
this.ColChoice.add("蓝色");
this.ColChoice.add("绿色");
this.ColChoice.addItemListener(this);
// 画笔大小选择
this.SizeChoice = new Choice(); //画笔大小下拉列表框
this.SizeChoice.add("1");
this.SizeChoice.add("3");
this.SizeChoice.add("5");
this.SizeChoice.add("7");
this.SizeChoice.add("9");
this.SizeChoice.addItemListener(this);
// 橡皮大小下拉列表框
this.EraserChoice = new Choice();
this.EraserChoice.add("5");
this.EraserChoice.add("9");
this.EraserChoice.add("13");
this.EraserChoice.add("17");
this.EraserChoice.addItemListener(this);
this.clear = new Button("清除");
this.eraser = new Button("橡皮擦");
this.pen = new Button("画笔");
this.drLine = new Button("画直线");
this.drCircle = new Button("画圆形");
this.drRect = new Button("画矩形");
this.openPic = new Button("导入图片");
this.savePic = new Button("保存图片");
this.colchooser = new Button("显示调色板");
// 各组件事件监听
this.clear.addActionListener(this);
this.eraser.addActionListener(this);
this.pen.addActionListener(this);
this.drLine.addActionListener(this);
this.drCircle.addActionListener(this);
this.drRect.addActionListener(this);
this.openPic.addActionListener(this);
this.savePic.addActionListener(this);
this.colchooser.addActionListener(this);
this.颜色 = new Label("画笔颜色", 1);
this.大小B = new Label("画笔大小", 1);
this.大小E = new Label("橡皮大小", 1);
this.toolPanel.add(this.openPic);
this.toolPanel.add(this.savePic);
this.toolPanel.add(this.pen);
this.toolPanel.add(this.drLine);
this.toolPanel.add(this.drCircle);
this.toolPanel.add(this.drRect);
this.toolPanel.add(this.颜色);
this.toolPanel.add(this.ColChoice);
this.toolPanel.add(this.大小B);
this.toolPanel.add(this.SizeChoice);
this.toolPanel.add(this.colchooser);
this.toolPanel.add(this.eraser);
this.toolPanel.add(this.大小E);
this.toolPanel.add(this.EraserChoice);
this.toolPanel.add(this.clear);
add(this.toolPanel);
this.toolPanel.setBounds(0, 0, 900, 40);
this.toolPanel.setBackground(Color.black);
this.toolPanel.setVisible(false);
// ---------------------菜单条----加载结束-----------------------------------------
addMouseListener(this);
addMouseMotionListener(this);
}
/**
* 功能:设置画笔颜色
*/
public void itemStateChanged(ItemEvent e)
{
//画笔颜色设置
if (e.getSource() == this.ColChoice)
{
String name = this.ColChoice.getSelectedItem();
if (name == "黑色")
{
this.c = new Color(0, 0, 0);
} else if (name == "红色")
{
this.c = new Color(255, 0, 0);
} else if (name == "绿色")
{
this.c = new Color(0, 255, 0);
} else
{
if (name != "蓝色")
return;
this.c = new Color(0, 0, 255);
}
}
//画笔大小设置
else if (e.getSource() == this.SizeChoice)
{
String selected = this.SizeChoice.getSelectedItem();
if (selected == "1")
{
this.con = 1;
} else if (selected == "3")
{
this.con = 3;
} else if (selected == "5")
{
this.con = 5;
} else if (selected == "7")
{
this.con = 7;
} else if (selected == "9")
{
this.con = 9;
}
this.size = new BasicStroke(this.con, 0, 2); //设置画笔大小
} else
{
//设置橡皮擦大小
if (e.getSource() != this.EraserChoice)
return;
String Esize = this.EraserChoice.getSelectedItem();
if (Esize == "5")
{
this.Econ = 5 * 2;
} else if (Esize == "9")
{
this.Econ = 9 * 2;
} else if (Esize == "13")
{
this.Econ = 13 * 2;
} else
{
if (Esize != "17")
return;
this.Econ = 17 * 3;
}
}
}
public void actionPerformed(ActionEvent e)
{
// ----------------设置右键菜单的显示与隐藏功能-----------------------------
if (e.getSource() == this.menuItem1)
{
this.jp.setVisible(false);
this.toolPanel.setVisible(true);
repaint();
} else if (e.getSource() == this.menuItem2)
{
this.jp.setVisible(true);
this.toolPanel.setVisible(false);
repaint();
}
// else if (e.getSource() == this.menuItem3)
// {
// //this.paintInfo.removeAllElements();
// //repaint();
// }
else if (e.getSource() == this.menuItem4)
{
this.toolPanel.setVisible(true);
repaint();
} else if (e.getSource() == this.menuItem5)
{
this.toolPanel.setVisible(false);
repaint();
}
// ----------------设置右键菜单的显示与隐藏功能--------结束---------------------
if (e.getSource() == this.pen) // 画笔
{
this.toolFlag = 0;
}
if (e.getSource() == this.eraser) // 橡皮擦
{
this.toolFlag = 1;
}
if (e.getSource() == this.clear) // 清除
{
this.toolFlag = 2;
this.paintInfo.removeAllElements();
repaint();
}
if (e.getSource() == this.drLine) // 画直线
{
this.toolFlag = 3;
}
if (e.getSource() == this.drCircle) // 画圆
{
this.toolFlag = 4;
}
if (e.getSource() == this.drRect) // 画矩形
{
this.toolFlag = 5;
}
if (e.getSource() == this.colchooser) // 调色板
{
Color newColor = JColorChooser.showDialog(this, "调色板", this.c);
this.c = newColor;
}
// -----------------------文件选择器以及打开和保存图片按钮的设置--------------------------------------------
JFileChooser chooser = new JFileChooser("../Control/WebRoot/images"); // 在当前目录下,创建文件选择器
JpgFileFilter jpgFilter = new JpgFileFilter(); // jpg过滤器
GifFileFilter gifFilter = new GifFileFilter(); // gif过滤器
chooser.addChoosableFileFilter(jpgFilter); // 加载jpg文件过滤器
chooser.addChoosableFileFilter(gifFilter); // 加载gif文件过滤器
chooser.setFileFilter(jpgFilter); // 设置默认的文件管理器。如果不设置,则最后添加的文件过滤器为默认过滤器
if (e.getSource() == this.openPic) // 打开图片按钮
{
int returnVal = chooser.showOpenDialog(this); // 打开文件选择器窗口
if (returnVal == JFileChooser.APPROVE_OPTION)
{
String filepath = chooser.getSelectedFile().getPath(); // 选择的文件路径
String filename = chooser.getSelectedFile().getName(); // 选择的文件名
try
{
this.curimg = ImageIO.read(new File(filepath));
Canvas ca = new canvas(this.curimg);
add(ca);
ca.setBounds(100, 200, this.curimg.getWidth(this),
this.curimg.getHeight(this));
validate();
this.curcan = null;
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
if (e.getSource() == this.savePic) // 保存图片按钮
{
chooser.setSelectedFile(new File("backPicture.jpg")); // 设置保存时的,默认文件名
int returnVal = chooser.showSaveDialog(this); // 显示保存文件窗口
String filepath = chooser.getSelectedFile().getPath();
String filename = chooser.getSelectedFile().getName();
if (returnVal == JFileChooser.APPROVE_OPTION)
{
if (!filepath.endsWith("jpg")) // 如果不以jpg后缀结尾,则加该后缀
{
filepath = filepath + ".jpg";
}
try
{
ImageIO.write(this.bi, "JPEG", new File(filepath));
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
}
public void mouseClicked(MouseEvent e)
{
clickhere(e);
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void update(Graphics g)
{
paint(g);
}
public void mousePressed(MouseEvent e)
{
Point p2;
switch (this.toolFlag)
{
case 3: //直线
this.x = e.getX();
this.y = e.getY();
p2 = new Point(this.x, this.y, this.c, this.toolFlag, this.con);
this.paintInfo.addElement(p2);
break;
case 4: //圆
this.x = e.getX();
this.y = e.getY();
p2 = new Point(this.x, this.y, this.c, this.toolFlag, this.con);
this.paintInfo.addElement(p2);
break;
case 5: //矩形
this.x = e.getX();
this.y = e.getY();
p2 = new Point(this.x, this.y, this.c, this.toolFlag, this.con);
this.paintInfo.addElement(p2);
}
}
public void mouseReleased(MouseEvent e)
{
//单击右键时,显示右键菜单
if ((e.getButton() == 3))
{
this.popMenu2.show(e.getComponent(), e.getX(), e.getY());
}
Point p3;
switch (this.toolFlag)
{
case 0: // 画笔
this.paintInfo.addElement(this.cutflag);
break;
case 1: //橡皮擦
this.paintInfo.addElement(this.cutflag);
break;
case 3: //直线
this.x = e.getX();
this.y = e.getY();
p3 = new Point(this.x, this.y, this.c, this.toolFlag, this.con);
this.paintInfo.addElement(p3);
this.paintInfo.addElement(this.cutflag);
repaint();
break;
case 4: //圆
this.x = e.getX();
this.y = e.getY();
p3 = new Point(this.x, this.y, this.c, this.toolFlag, this.con);
this.paintInfo.addElement(p3);
this.paintInfo.addElement(this.cutflag);
repaint();
break;
case 5: //矩形
this.x = e.getX();
this.y = e.getY();
p3 = new Point(this.x, this.y, this.c, this.toolFlag, this.con);
this.paintInfo.addElement(p3);
this.paintInfo.addElement(this.cutflag);
repaint();
case 2:
}
}
public void mouseDragged(MouseEvent e)
{
Point p1;
switch (this.toolFlag)
{
case 0: //画笔
this.x = e.getX();
this.y = e.getY();
p1 = new Point(this.x, this.y, this.c, this.toolFlag, this.con);
this.paintInfo.addElement(p1);
repaint();
break;
case 1: //橡皮擦
this.x = e.getX();
this.y = e.getY();
p1 = new Point(this.x, this.y, null, this.toolFlag, this.Econ);
this.paintInfo.addElement(p1);
repaint();
}
}
public void mouseMoved(MouseEvent e)
{
if (!(this.toolPanel.isVisible()))
return;
setCursor(new Cursor(1));
}
public void clickhere(MouseEvent e)
{
if (this.curcan == null)
return;
/**
* 当选中图像工具条上的图片后,然后,在绘图区域点击鼠标左键时,
* 往绘图区域添加动态图标,位置在鼠标点击时的坐标点
*/
if (e.getModifiers() == MouseEvent.BUTTON1_MASK)
{
Canvas ca = new canvas(curimg);
this.add(ca);
//ca.setBounds(e.getX(), e.getY(), curimg.getWidth(this), curimg.getHeight(this));
ca.setBounds(e.getX(), 800 * 2 / 3, curimg.getWidth(this), curimg
.getHeight(this)); //鼠标点击位置画出图标
this.validate();
curcan = null;
}
}
public void paint(Graphics g)
{
//this.g2d = ((Graphics2D) g);
this.g2d = ((Graphics2D) this.bi.getGraphics());
this.n = this.paintInfo.size(); //点信息向量Vec
if (this.toolFlag == 2) //清除按钮
{
g.clearRect(0, 0, getSize().width, getSize().height); // 清除
this.g2d.clearRect(0, 0, getSize().width, getSize().height);
}
for (int i = 0; i < this.n - 1; ++i)
{
DrawImage.Point p1 = this.paintInfo.elementAt(i);
DrawImage.Point p2 = this.paintInfo.elementAt(i + 1);
this.size = new BasicStroke(p1.boarder, 0, 2); //画笔粗细
this.g2d.setColor(p1.col);
this.g2d.setStroke(this.size);
if (p1.tool != p2.tool)
continue;
switch (p1.tool)
{
// 画笔
case 0:
Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
this.g2d.draw(line1);
break;
// 橡皮
case 1:
g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);
this.g2d.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);
break;
// 画直线
case 3:
Line2D line2 = null;
int X = Math.abs(p2.x - p1.x);
int Y = Math.abs(p2.y - p1.y);
if (X >= Y)
{
line2 = new Line2D.Double(p1.x, p1.y, p2.x, p1.y);
} else
{
line2 = new Line2D.Double(p1.x, p1.y, p1.x, p2.y);
}
this.g2d.draw(line2);
break;
// 画圆
case 4:
Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math
.abs(p2.x - p1.x), Math.abs(p2.y - p1.y));
this.g2d.draw(ellipse);
break;
// 画矩形
case 5:
Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math
.abs(p2.x - p1.x), Math.abs(p2.y - p1.y));
this.g2d.draw(rect);
break;
// 截断,跳过
case 6:
++i;
case 2:
}
}
g.drawImage(this.bi, 0, 0, this);
}
Graphics2D g2 = null;
//-----------------图像工具条------------------------
class canvas extends Canvas
{
private static final long serialVersionUID = 1L;
Image im = null;
int X;
int Y;
int bufferX;
int bufferY;
int bufferWidth;
int bufferHeight;
public canvas(Image paramImage)
{
setCursor(new Cursor(Cursor.MOVE_CURSOR)); //设置鼠标悬浮样式,设立为移动形
this.im = paramImage;
//注册鼠标按下事件,用于获取需要绘制的图标对象
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
canvas.this.clickcanvas(e);
}
public void mouseReleased(MouseEvent e)
{
Canvas mcan = (Canvas) e.getSource();
int mtop = mcan.getY();
int mleft = mcan.getX();
int mwidth = mcan.getWidth();
int mheight = mcan.getHeight();
canvas.this.X = (mleft + e.getX() - DrawImage.this.clickX);
canvas.this.Y = (mtop + e.getY() - DrawImage.this.clickY);
canvas.this.bufferX = canvas.this.X;
canvas.this.bufferY = canvas.this.Y;
canvas.this.bufferWidth = mwidth;
canvas.this.bufferHeight = mheight;
canvas.this.drawBufferImage(); //在缓冲区中绘制出动态图像
}
});
/**
* 动态图标键盘事件
*/
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == 127)
canvas.this.removecanvas(e);
}
});
/**
* 动态图标鼠标移动和拖动事件
*/
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent e)
{
canvas.this.movecanvas(e);
}
});
}
//移动图标
public void movecanvas(MouseEvent e)
{
Canvas mcan = (Canvas) e.getSource();
int mtop = mcan.getY();
int mleft = mcan.getX();
int mwidth = mcan.getWidth();
int mheight = mcan.getHeight();
clearImage(); //在内存中画出新图标之前,先清空这一区域以前画的图标
mcan.setBounds(mleft + e.getX() - DrawImage.this.clickX, mtop
+ e.getY() - DrawImage.this.clickY, mwidth, mheight);
for (int i = 0; i < DrawImage.this.v.size(); ++i)
{
Vector v1 = DrawImage.this.v.elementAt(i);
if (((Canvas[]) v1.elementAt(0))[0].equals(mcan))
{
((int[]) v1.elementAt(1))[0] = mcan.getX();
((int[]) v1.elementAt(1))[1] = mcan.getY();
((int[]) v1.elementAt(1))[2] = mcan.getWidth();
((int[]) v1.elementAt(1))[3] = mcan.getHeight();
} else
{
if (!(((Canvas[]) v1.elementAt(0))[1].equals(mcan)))
continue;
((int[]) v1.elementAt(1))[4] = mcan.getX();
((int[]) v1.elementAt(1))[5] = mcan.getY();
((int[]) v1.elementAt(1))[6] = mcan.getWidth();
((int[]) v1.elementAt(1))[7] = mcan.getHeight();
}
}
((DrawImage) getParent()).repaint();
}
public void removecanvas(KeyEvent e)
{
try
{
Canvas mcan = (Canvas) e.getSource();
((DrawImage) getParent()).remove(DrawImage.this.curdelcan);
for (int i = DrawImage.this.v.size() - 1; i >= 0; --i)
{
Vector v1 = DrawImage.this.v.elementAt(i);
if ((!(((Canvas[]) v1.elementAt(0))[0].equals(mcan)))
&& (!(((Canvas[]) v1.elementAt(0))[1].equals(mcan))))
continue;
DrawImage.this.v.removeElementAt(i);
}
((DrawImage) getParent()).validate();
((DrawImage) getParent()).repaint();
}
catch (NullPointerException ex)
{
return;
}
}
//在单击动态图标
public void clickcanvas(MouseEvent e)
{
DrawImage.this.curdelcan = ((Canvas) e.getSource()); //设置将要删除的图标
DrawImage.this.clickX = e.getX();
DrawImage.this.clickY = e.getY();
((DrawImage) getParent()).repaint();
}
public void paint(Graphics g)
{
g.drawImage(this.im, 0, 0, this);
}
//在缓冲区中绘制出动态图像
public void drawBufferImage()
{
//Graphics2D g2 = (Graphics2D) DrawImage.this.bi.getGraphics();
g2 = (Graphics2D) DrawImage.this.bi.getGraphics();
g2.drawImage(this.im, this.X, this.Y, this);
g2.dispose();
}
//清除内存中的该图标区域
public void clearImage()
{
//Graphics2D g2 = (Graphics2D) DrawImage.this.bi.getGraphics();
g2 = (Graphics2D) DrawImage.this.bi.getGraphics();
g2.clearRect(this.bufferX, this.bufferY, this.bufferWidth,
this.bufferHeight);
}
}
//-----------------工具栏图标---------------------------------
class myCanvas extends Canvas
{
private static final long serialVersionUID = 1L;
Image im = null;
String str = "";
public myCanvas(String paramString)
{
this.str = paramString;
}
public myCanvas(Image paramImage)
{
setCursor(new Cursor(Cursor.HAND_CURSOR)); //设置鼠标悬浮时的样式,这里为手型
this.im = paramImage;
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
myCanvas.this.clickmyCanvas(e);
}
});
}
/**
* 每一个工具按钮单击事件
*/
public void clickmyCanvas(MouseEvent e)
{
DrawImage.this.curcan = ((Canvas) e.getSource()); //获取当前图标对象
DrawImage.this.curimg = this.im; //获取当前图标对象的图象
}
public void paint(Graphics g)
{
if (this.str.equals(""))
{
g.drawImage(this.im, 0, 0, this);
} else
{
g.drawString(this.str, 20, getHeight() / 2);
}
}
}
//-----------------工具栏图标---------结束------------------------
class Point implements Serializable
{
private static final long serialVersionUID = 1L;
int x;
int y;
Color col;
int tool;
int boarder;
Point(int paramInt1, int paramInt2)
{
this.x = paramInt1;
this.y = paramInt2;
}
Point(int paramInt1, int paramInt2, Color paramColor, int paramInt3,
int paramInt4)
{
this.x = paramInt1;
this.y = paramInt2;
this.col = paramColor;
this.tool = paramInt3;
this.boarder = paramInt4;
}
}
// -----------------文件选择器中jpg和gif文件的过滤-------------------------------------
class JpgFileFilter extends FileFilter
{
public String getDescription()
{
return "*.jpg";
}
public boolean accept(File file)
{
String name = file.getName();
return name.toLowerCase().endsWith(".jpg");
}
}
class GifFileFilter extends FileFilter
{
public String getDescription()
{
return "*.gif";
}
public boolean accept(File file)
{
String name = file.getName();
return name.toLowerCase().endsWith(".gif");
}
}
//----------------文件选择器中jpg和gif文件的过滤---------结束-----------------------------
}