applet画图板程序

import java.applet.Applet;
import java.awt.*;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
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.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Properties;
import java.util.Vector;

import javax.imageio.ImageIO;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class DrawPencil extends Applet
{
	private static final long serialVersionUID = 1L;
	Vector paintInfo = null;// 点信息向量组
	int n = 1;
	MediaTracker mt;
	int x = -1, y = -1;
	int con = 1;
	int Econ = 5;
	int toolFlag = 0;
	Color c = new Color(0, 0, 0);
	BasicStroke size = new BasicStroke(con, BasicStroke.CAP_BUTT,
			BasicStroke.JOIN_BEVEL);
	EveryPoint cutflag = new EveryPoint(-1, -1, c, 6, con);
	Panel toolPanel;
	Button eraser, drLine, drCircle, drRect;
	Button clear, pen;
	Choice ColChoice, SizeChoice, EraserChoice;
	Button colchooser;
	Label 颜色, 大小B, 大小E;
	Button openPic, savePic;
	FileDialog openPicture, savePicture;

	public DrawPencil()
	{
		super();
	}

	public void init()
	{
		this.setSize(900, 600);

		paintInfo = new Vector();
		ColChoice = new Choice();
		ColChoice.add("black");
		ColChoice.add("red");
		ColChoice.add("blue");
		ColChoice.add("green");
		ColChoice.addItemListener(new ItemListener()
		{
			public void itemStateChanged(ItemEvent e)
			{
				String name = ColChoice.getSelectedItem();
				if (name == "black")
				{
					c = new Color(0, 0, 0);
				}
				else if (name == "red")
				{
					c = new Color(255, 0, 0);
				}
				else if (name == "green")
				{
					c = new Color(0, 255, 0);
				}
				else if (name == "blue")
				{
					c = new Color(0, 0, 255);
				}
			}
		});
		SizeChoice = new Choice();
		SizeChoice.add("1");
		SizeChoice.add("3");
		SizeChoice.add("5");
		SizeChoice.add("7");
		SizeChoice.add("9");
		SizeChoice.addItemListener(new ItemListener()
		{
			public void itemStateChanged(ItemEvent e)
			{
				String selected = SizeChoice.getSelectedItem();
				if (selected == "1")
				{
					con = 1;
					size = new BasicStroke(con, BasicStroke.CAP_BUTT,
							BasicStroke.JOIN_BEVEL);
				}
				else if (selected == "3")
				{
					con = 3;
					size = new BasicStroke(con, BasicStroke.CAP_BUTT,
							BasicStroke.JOIN_BEVEL);
				}
				else if (selected == "5")
				{
					con = 5;
					size = new BasicStroke(con, BasicStroke.CAP_BUTT,
							BasicStroke.JOIN_BEVEL);
				}
				else if (selected == "7")
				{
					con = 7;
					size = new BasicStroke(con, BasicStroke.CAP_BUTT,
							BasicStroke.JOIN_BEVEL);
				}
				else if (selected == "9")
				{
					con = 9;
					size = new BasicStroke(con, BasicStroke.CAP_BUTT,
							BasicStroke.JOIN_BEVEL);
				}
			}
		});
		EraserChoice = new Choice();
		EraserChoice.add("5");
		EraserChoice.add("9");
		EraserChoice.add("13");
		EraserChoice.add("17");
		EraserChoice.addItemListener(new ItemListener()
		{
			public void itemStateChanged(ItemEvent e)
			{
				String Esize = EraserChoice.getSelectedItem();
				if (Esize == "5")
				{
					Econ = 5 * 2;
				}
				else if (Esize == "9")
				{
					Econ = 9 * 2;
				}
				else if (Esize == "13")
				{
					Econ = 13 * 2;
				}
				else if (Esize == "17")
				{
					Econ = 17 * 3;
				}
			}
		});
		toolPanel = new Panel();
		clear = new Button("清除");
		eraser = new Button("橡皮");
		pen = new Button("画笔");
		drLine = new Button("画直线");
		drCircle = new Button("画圆形");
		drRect = new Button("画矩形");
		openPic = new Button("打开图画");
		savePic = new Button("保存图画");
		clear.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				toolFlag = 2;
				paintInfo.removeAllElements();
				repaint();
			}

		});
		eraser.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				// TODO 自动生成方法存根
				toolFlag = 1;
			}
		});
		pen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				// TODO 自动生成方法存根
				toolFlag = 0;
			}
		});
		drLine.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				toolFlag = 3;
			}
		});
		drCircle.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				toolFlag = 4;
			}
		});
		drRect.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				toolFlag = 5;
			}
		});
		savePic.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				printPanelToJPG(toolPanel);
			}
		});
		颜色 = new Label("画笔颜色", Label.CENTER);
		大小B = new Label("画笔大小", Label.CENTER);
		大小E = new Label("橡皮大小", Label.CENTER);
		toolPanel.add(savePic);
		toolPanel.add(pen);
		toolPanel.add(drLine);
		toolPanel.add(颜色);
		toolPanel.add(ColChoice);
		toolPanel.add(大小B);
		toolPanel.add(SizeChoice);
		toolPanel.add(eraser);
		toolPanel.add(大小E);
		toolPanel.add(EraserChoice);
		toolPanel.add(clear);
		this.add(toolPanel);
		setBounds(60, 60, 900, 600);
		setVisible(true);
		validate();
		this.addMouseMotionListener(new MouseMotionAdapter()
		{
			public void mouseDragged(MouseEvent e)
			{
				EveryPoint p1;
				switch (toolFlag)
				{
				case 0:
					x = (int) e.getX();
					y = (int) e.getY();
					p1 = new EveryPoint(x, y, c, toolFlag, con);
					paintInfo.addElement(p1);
					repaint();
					break;
				case 1:
					x = (int) e.getX();
					y = (int) e.getY();
					p1 = new EveryPoint(x, y, null, toolFlag, Econ);
					paintInfo.addElement(p1);
					repaint();
					break;
				default:
				}
			}
		});

		this.addMouseListener(new MouseAdapter()
		{
			public void mousePressed(MouseEvent e)
			{
				EveryPoint p2;
				switch (toolFlag)
				{
				case 3:
					x = (int) e.getX();
					y = (int) e.getY();
					p2 = new EveryPoint(x, y, c, toolFlag, con);
					paintInfo.addElement(p2);
					break;
				case 4:
					x = (int) e.getX();
					y = (int) e.getY();
					p2 = new EveryPoint(x, y, c, toolFlag, con);
					paintInfo.addElement(p2);
					break;
				case 5:
					x = (int) e.getX();
					y = (int) e.getY();
					p2 = new EveryPoint(x, y, c, toolFlag, con);
					paintInfo.addElement(p2);
					break;
				default:
				}
			}

			public void mouseReleased(MouseEvent e)
			{
				EveryPoint p3;
				switch (toolFlag)
				{
				case 0:
					paintInfo.addElement(cutflag);
					break;
				case 1:
					paintInfo.addElement(cutflag);
					break;
				case 3:
					x = (int) e.getX();
					y = (int) e.getY();
					p3 = new EveryPoint(x, y, c, toolFlag, con);
					paintInfo.addElement(p3);
					paintInfo.addElement(cutflag);
					repaint();
					break;
				case 4:
					x = (int) e.getX();
					y = (int) e.getY();
					p3 = new EveryPoint(x, y, c, toolFlag, con);
					paintInfo.addElement(p3);
					paintInfo.addElement(cutflag);
					repaint();
					break;
				case 5:
					x = (int) e.getX();
					y = (int) e.getY();
					p3 = new EveryPoint(x, y, c, toolFlag, con);
					paintInfo.addElement(p3);
					paintInfo.addElement(cutflag);
					repaint();
					break;
				default:
				}
			}
		});
	}

	public void paint(Graphics g)
	{
		Graphics2D g2d = (Graphics2D) g;
		EveryPoint p1, p2;
		n = paintInfo.size();
		if (toolFlag == 2)
			g.clearRect(0, 0, getSize().width, getSize().height);// 清除
		for (int i = 0; i < n - 1; i++)
		{
			p1 = (EveryPoint) paintInfo.elementAt(i);
			p2 = (EveryPoint) paintInfo.elementAt(i + 1);
			size = new BasicStroke(p1.boarder, BasicStroke.CAP_BUTT,
					BasicStroke.JOIN_BEVEL);
			g2d.setColor(p1.col);
			g2d.setStroke(size);
			if (p1.tool == p2.tool)
			{
				switch (p1.tool)
				{
				case 0:
					Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
					g2d.draw(line1);
					break;
				case 1:
					g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);
					break;
				case 3:
					Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
					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));
					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));
					g2d.draw(rect);
					break;
				case 6:
					i = i + 1;
					break;
				default:
				}
			}
		}
	}

	public void update(Graphics g)
	{
		paint(g);
	}

	public void printPanelToJPG(Panel graph)
	{
		int width = this.getWidth();
		int height = this.getHeight();
		BufferedImage bi = new BufferedImage(width, height,
				BufferedImage.TYPE_3BYTE_BGR);
		Graphics2D g2d = (Graphics2D) bi.createGraphics();
		g2d = (Graphics2D) bi.getGraphics();
		try
		{
			JFileChooser chooser = new JFileChooser(".//");
			chooser.setAcceptAllFileFilterUsed(false);
			chooser.setSelectedFile(new File("1.jpg"));
			int status = chooser.showSaveDialog(graph);
			if (status == JFileChooser.APPROVE_OPTION)
			{
				File saveFile = chooser.getSelectedFile();
				if (saveFile.exists())
				{
					String prompt = "The file "
							+ saveFile.getName()
							+ " already exists. Do you want to replace the existing file";
					int ret = JOptionPane.showConfirmDialog(graph, prompt,
							"Warning", JOptionPane.YES_NO_OPTION);
					if (ret == JOptionPane.NO_OPTION)
					{
						return;
					}
				}
				saveFile = new File(saveFile.getAbsoluteFile() + ".jpg");
				FileOutputStream fos = new FileOutputStream(saveFile);
				JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(fos);
				jpegEncoder.encode(bi);
				fos.flush();
				fos.close();
			}
		}
		catch (IOException ex)
		{
			JOptionPane.showMessageDialog(graph, "IO Error, operation failed\n"
					+ ex.toString(), "Error", JOptionPane.PLAIN_MESSAGE);
		}
	}

	private Point Point(int i, int j)
	{
		Point point = new Point(i, j);
		return point;
	}
}

class EveryPoint implements Serializable
{
	int x, y;
	Color col;
	int tool;

	int boarder;

	private static final long serialVersionUID = 1L;

	EveryPoint(int x, int y, Color col, int tool, int boarder)
	{
		this.x = x;
		this.y = y;
		this.col = col;
		this.tool = tool;
		this.boarder = boarder;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值