`

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 

 

分享到:
评论

相关推荐

    基于java applet的简易画图程序

    Java Applet是Java技术早期的一种应用形式,主要用于在Web浏览器中执行小应用程序,例如我们的“简易画图程序”。这个程序提供了基本的图形绘制功能,帮助用户理解和实践Java事件处理机制。下面将详细介绍Java ...

    一个简单的Applet画图程序(鼠标画线)

    一个Applet程序,通过鼠标监听实现鼠标随笔画线 没多大技术含量,比较简单

    Java Applet 设计的画图程序

    在这个特定的项目中,"Java Applet 设计的画图程序" 是一个基于Java编程语言实现的简单画图应用,它允许用户在浏览器环境下进行图形绘制。这个程序非常适合初学者了解Applet的工作原理以及如何利用Java的图形库来...

    有applet实现画图的操作界面

    这个界面允许用户绘制直线、椭圆、矩形以及曲线,并且可以自定义颜色和画笔的大小,提供了一种丰富的图形绘制功能。 首先,我们需要了解Applet的基本概念。Applet是Java小应用程序,它是Java类的一个实例,可以通过...

    applet 小的画图程序

    这个小程序是我自己搞的,能参数化的绘制椭圆,长方形,以及鼠标绘制多边形,有兴趣的可以研究研究,如果有什么新的思路,留言给我,以后会改进的,

    Applet画图,上传

    Applet是一种Java小程序,常用于网页中以提供交互式的功能,比如画图。在这个特定的场景下,"Applet画图,上传"涉及到的技术点主要包括Java Applet的基础使用、图形绘制以及文件上传。 首先,我们需要了解Java ...

    java课程设计 applet程序 动画

    **Applet**是一种可以在浏览器中运行的小型Java应用程序,常用于Web页面中的交互式功能。随着技术的发展,Applet逐渐被更现代的技术如JavaFX所替代,但在学习早期Java编程时,Applet仍是一个重要的概念。 **动画**...

    简单的java applet图像移动重画实例

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型应用程序。在这个“简单的java applet图像移动重画实例”中,我们将深入探讨Java Applet的基础知识,以及如何实现...

    java applet 挖宝小程序

    Java Applet 是一种早期的Java技术,用于在Web浏览器中嵌入和运行小应用程序,比如游戏、互动媒体等。在这个“java applet 挖宝小程序”中,我们看到的是一个简单的游戏应用,用户可以通过键盘的上下左右方向键来...

    可设置大小的鼠标点击画圆和正方形的Applet程序

    总的来说,这个Applet程序结合了Java的图形编程、事件处理和用户交互,提供了一种创新的方式让用户在网页上进行图形创作。通过理解和实现这样的程序,开发者可以深入掌握Java GUI编程,尤其是Applet的相关技术和设计...

    基于Java的Applet钢琴模拟程序源码.zip

    《基于Java的Applet钢琴模拟程序源码解析》 在计算机编程领域,Java语言以其跨平台、面向对象的特性,广泛应用于各种应用开发,其中包括Web应用程序。本篇将深入探讨一个基于Java的特殊应用——Applet钢琴模拟程序...

    Java中用Applet画sinx

    在Java编程语言中,Applet是一种特殊的Java程序,它可以在Web浏览器中运行,为用户提供交互式的体验。在本示例中,我们将探讨如何利用Applet来绘制正弦函数sin(x)的图形。这个过程涉及到Java图形处理、数学计算以及...

    applet 画图程序

    这是我写的一个简陋的画图版.里面还有很多可以改进的地方,简化版方便大家参考.

    最简单的java applet图像移动重画实例

    Java Applet是Java平台早期的一种技术,用于在Web浏览器中执行小程序,比如显示交互式的图形、游戏等。在这个"最简单的java applet图像移动重画实例"中,我们将深入探讨如何利用Java Applet来实现一个动态移动的图像...

    一个简单Applet小程序

    本示例是一个简单的Applet小程序,通过线程来实现动态地在Applet窗口中随机画圆。 首先,我们需要了解Applet的基本概念。Applet是Java类库中的`java.applet.Applet`类或其子类的实例,它可以在支持Java的Web浏览器...

    基于java的开发源码-Applet钢琴模拟程序源码.zip

    基于java的开发源码-Applet钢琴模拟程序源码.zip 基于java的开发源码-Applet钢琴模拟程序源码.zip 基于java的开发源码-Applet钢琴模拟程序源码.zip 基于java的开发源码-Applet钢琴模拟程序源码.zip 基于java的开发...

    在Java Applet中实现动画.rar_applet_java Applet

    Java Applet是Java技术在Web浏览器中运行的一种小程序,它为网页添加了交互性和动态性。本教程将探讨如何在Java Applet中实现动画效果,让网页内容更加生动有趣。 首先,理解动画的基本原理至关重要。动画是通过...

    JAVA程序设计语言Applet应用程序.pdf

    ### JAVA程序设计语言Applet应用程序知识点详解 #### 1. Java程序分类 Java程序主要分为两类:Java Application 和 Java Applet。 - **Java Application**:这类程序是独立运行的Java程序,通常具备`main`方法作为...

    Applet钢琴模拟程序

    【Applet钢琴模拟程序】是一种基于Java Applet技术的音乐创作工具,它允许用户通过图形用户界面模拟演奏钢琴,甚至进行简单的音乐编辑。在Java编程领域,Applet是一种嵌入到网页中的小型Java程序,可以为用户提供...

    applet图片扫描程序

    Applet图片扫描程序是一种基于Java Web的技术,用于在网页中实现图像的扫描和展示功能。Applet是Java的一种特殊类型的应用程序,它可以在用户的Web浏览器中运行,为用户提供交互式的体验,比如处理图像、视频或者...

Global site tag (gtag.js) - Google Analytics