applet画图板程序(画直线、画圆、画笔、画矩形、调色板)

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
import java.io.*;


public class DrawLine
{
	public static void main(String args[])
	{
		new paintboard("画图程序");
	}
}
class Point implements Serializable
{
	int x, y;
	Color col;
	int tool;
	int boarder;

	Point(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;
	}
}

class paintboard extends JFrame implements ActionListener, MouseMotionListener,
		MouseListener, ItemListener
{
	int x = -1, y = -1;
	int con = 1;// 画笔大小
	int Econ = 5;// 橡皮大小

	int toolFlag = 0;// toolFlag:工具标记
	// toolFlag工具对应表:
	// (0--画笔);(1--橡皮);(2--清除);
	// (3--直线);(4--圆);(5--矩形);

	Color c = new Color(0, 0, 0); // 画笔颜色
	BasicStroke size = new BasicStroke(con, BasicStroke.CAP_BUTT,
			BasicStroke.JOIN_BEVEL);// 画笔粗细
	Point cutflag = new Point(-1, -1, c, 6, con);// 截断标志

	Vector paintInfo = null;// 点信息向量组
	int n = 1;

	FileInputStream picIn = null;
	FileOutputStream picOut = null;

	ObjectInputStream VIn = null;
	ObjectOutputStream VOut = null;

	// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/
	JPanel toolPanel;
	Button eraser, drLine, drCircle, drRect;
	Button clear, pen;
	Choice ColChoice, SizeChoice, EraserChoice;
	Button colchooser;
	Label 颜色, 大小B, 大小E;
	// 保存功能
	Button openPic, savePic;
	FileDialog openPicture, savePicture;

	paintboard(String s)
	{
		super(s);
		addMouseMotionListener(this);
		addMouseListener(this);

		paintInfo = new Vector();

		/* 各工具按钮及选择项 */
		// 颜色选择
		ColChoice = new Choice(); //颜色选择下拉列表框
		ColChoice.add("black");
		ColChoice.add("red");
		ColChoice.add("blue");
		ColChoice.add("green");
		ColChoice.addItemListener(this);

		// 画笔大小选择
		SizeChoice = new Choice(); //画笔大小下拉列表框
		SizeChoice.add("1");
		SizeChoice.add("3");
		SizeChoice.add("5");
		SizeChoice.add("7");
		SizeChoice.add("9");
		SizeChoice.addItemListener(this);

		// 橡皮大小下拉列表框
		EraserChoice = new Choice();
		EraserChoice.add("5");
		EraserChoice.add("9");
		EraserChoice.add("13");
		EraserChoice.add("17");
		EraserChoice.addItemListener(this);
		// //
		toolPanel = new JPanel();

		clear = new Button("清除");
		eraser = new Button("橡皮");
		pen = new Button("画笔");
		drLine = new Button("画直线");
		drCircle = new Button("画圆形");
		drRect = new Button("画矩形");

		openPic = new Button("打开图画");
		savePic = new Button("保存图画");

		colchooser = new Button("显示调色板");

		// 各组件事件监听
		clear.addActionListener(this);
		eraser.addActionListener(this);
		pen.addActionListener(this);
		drLine.addActionListener(this);
		drCircle.addActionListener(this);
		drRect.addActionListener(this);
		openPic.addActionListener(this);
		savePic.addActionListener(this);
		colchooser.addActionListener(this);

		颜色 = new Label("画笔颜色", Label.CENTER);
		大小B = new Label("画笔大小", Label.CENTER);
		大小E = new Label("橡皮大小", Label.CENTER);
		// 面板添加组件
		toolPanel.add(openPic);
		toolPanel.add(savePic);

		toolPanel.add(pen);
		toolPanel.add(drLine);
		toolPanel.add(drCircle);
		toolPanel.add(drRect);

		toolPanel.add(颜色);
		toolPanel.add(ColChoice);
		toolPanel.add(大小B);
		toolPanel.add(SizeChoice);
		toolPanel.add(colchooser);

		toolPanel.add(eraser);
		toolPanel.add(大小E);
		toolPanel.add(EraserChoice);

		toolPanel.add(clear);

		add(toolPanel, BorderLayout.NORTH); //工具面板到APPLET面板

		setBounds(60, 60, 900, 600);
		setVisible(true);
		validate();

		//---------------------文件打开对话框------------------------------------
		openPicture = new FileDialog(this, "打开图画", FileDialog.LOAD);
		openPicture.setVisible(false);
		savePicture = new FileDialog(this, "保存图画", FileDialog.SAVE);
		savePicture.setVisible(false);

		openPicture.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				openPicture.setVisible(false);
			}
		});

		savePicture.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				savePicture.setVisible(false);
			}
		});
		//---------------------文件打开对话框-----------结束-------------------------

		addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});

	}

	public void paint(Graphics g)
	{
		Graphics2D g2d = (Graphics2D) g;

		Point p1, p2;

		n = paintInfo.size(); //点信息向量Vec

		if (toolFlag == 2) //清除按钮
		{
			g.clearRect(0, 0, getSize().width, getSize().height); // 清除
		}

		for (int i = 0; i < n-1; i++)
		{
			p1 = (Point) paintInfo.elementAt(i);
			p2 = (Point) 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:
				}// end switch
			}// end if
		}// end for
	}

	public void itemStateChanged(ItemEvent e)
	{
		if (e.getSource() == ColChoice)// 预选颜色
		{
			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);
			}
		}
		else if (e.getSource() == SizeChoice)// 画笔大小
		{
			String selected = SizeChoice.getSelectedItem();

			if (selected == "1")
			{
				con = 1;
			}
			else if (selected == "3")
			{
				con = 3;
			}
			else if (selected == "5")
			{
				con = 5;
			}
			else if (selected == "7")
			{
				con = 7;
			}
			else if (selected == "9")
			{
				con = 9;
			}
			size = new BasicStroke(con, BasicStroke.CAP_BUTT,
					BasicStroke.JOIN_BEVEL); //设置画笔大小
		}
		else if (e.getSource() == EraserChoice) //设置橡皮大小
		{
			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;
			}

		}

	}

	public void mouseDragged(MouseEvent e)
	{
		Point p1;
		switch (toolFlag)
		{
		case 0:// 画笔
			x = (int) e.getX();
			y = (int) e.getY();
			p1 = new Point(x, y, c, toolFlag, con);
			paintInfo.addElement(p1);
			repaint();
			break;

		case 1:// 橡皮
			x = (int) e.getX();
			y = (int) e.getY();
			p1 = new Point(x, y, null, toolFlag, Econ);
			paintInfo.addElement(p1);
			repaint();
			break;

		default:
		}
	}

	public void mouseMoved(MouseEvent e)
	{
	}

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

	public void mousePressed(MouseEvent e)
	{
		Point p2;
		switch (toolFlag)
		{
		case 3:// 直线
			x = (int) e.getX();
			y = (int) e.getY();
			p2 = new Point(x, y, c, toolFlag, con);
			paintInfo.addElement(p2);
			break;

		case 4: // 圆
			x = (int) e.getX();
			y = (int) e.getY();
			p2 = new Point(x, y, c, toolFlag, con);
			paintInfo.addElement(p2);
			break;

		case 5: // 矩形
			x = (int) e.getX();
			y = (int) e.getY();
			p2 = new Point(x, y, c, toolFlag, con);
			paintInfo.addElement(p2);
			break;

		default:
		}
	}

	public void mouseReleased(MouseEvent e)
	{
		Point p3;
		switch (toolFlag)
		{
		case 0:// 画笔
			paintInfo.addElement(cutflag);
			break;

		case 1: // eraser
			paintInfo.addElement(cutflag);
			break;

		case 3:// 直线
			x = (int) e.getX();
			y = (int) e.getY();
			p3 = new Point(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 Point(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 Point(x, y, c, toolFlag, con);
			paintInfo.addElement(p3);
			paintInfo.addElement(cutflag);
			repaint();
			break;

		default:
		}
	}

	public void mouseEntered(MouseEvent e)
	{
	}

	public void mouseExited(MouseEvent e)
	{
	}

	public void mouseClicked(MouseEvent e)
	{
	}

	public void actionPerformed(ActionEvent e)
	{

		if (e.getSource() == pen)// 画笔
		{
			toolFlag = 0;
		}

		if (e.getSource() == eraser)// 橡皮
		{
			toolFlag = 1;
		}

		if (e.getSource() == clear)// 清除
		{
			toolFlag = 2;
			paintInfo.removeAllElements();
			repaint();
		}

		if (e.getSource() == drLine)// 画线
		{
			toolFlag = 3;
		}

		if (e.getSource() == drCircle)// 画圆
		{
			toolFlag = 4;
		}

		if (e.getSource() == drRect)// 画矩形
		{
			toolFlag = 5;
		}

		if (e.getSource() == colchooser)// 调色板
		{
			Color newColor = JColorChooser.showDialog(this, "调色板", c);
			c = newColor;
		}

		if (e.getSource() == openPic)// 打开图画
		{
			openPicture.setVisible(true);

			if (openPicture.getFile() != null)
			{
				int tempflag;
				tempflag = toolFlag;
				toolFlag = 2;
				repaint();

				try
				{
					paintInfo.removeAllElements();
					File filein = new File(openPicture.getDirectory(),
							openPicture.getFile());
					picIn = new FileInputStream(filein);
					VIn = new ObjectInputStream(picIn);
					paintInfo = (Vector) VIn.readObject();
					VIn.close();
					repaint();
					toolFlag = tempflag;

				}

				catch (ClassNotFoundException IOe2)
				{
					repaint();
					toolFlag = tempflag;
					System.out.println("can not read object");
				}
				catch (IOException IOe)
				{
					repaint();
					toolFlag = tempflag;
					System.out.println("can not read file");
				}
			}

		}

		if (e.getSource() == savePic)//保存图画 
		{
			savePicture.setVisible(true);
			try
			{
				File fileout = new File(savePicture.getDirectory(), savePicture
						.getFile());
				picOut = new FileOutputStream(fileout);
				VOut = new ObjectOutputStream(picOut);
				VOut.writeObject(paintInfo);
				VOut.close();
			}
			catch (IOException IOe)
			{
				System.out.println("can not write object");
			}

		}
	}
}//end paintboard 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值