`

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

 

分享到:
评论
1 楼 白色的 2009-11-14  
也太狠了

相关推荐

    基于java applet的简易画图程序

    以上代码展示了如何创建一个简单的Java Applet画图程序,用户可以按住鼠标左键拖动来绘制线条。 6. 总结: 通过这个基于Java Applet的简易画图程序,我们可以学习到Java事件处理机制,理解如何响应用户的鼠标操作,...

    JAVA实现简单的画图板

    这个简单的Java画图板程序展示了如何结合GUI组件、事件处理和文件操作来创建一个交互式的绘图工具。虽然这个例子基于Applet,但在现代Java开发中,可以使用Swing或JavaFX来实现类似的功能,同时提供更好的跨平台兼容...

    Java简单画图实例_画一个诺基亚手机

    在Java的历史版本中,APPLET是一种可以嵌入HTML网页中的小程序,用于提供动态和交互式的网页内容。然而,随着Web技术的发展,APPLET已经过时,现在更推荐使用JApplet或者JavaFX。在本实例中,我们依然可以学习...

    datatransfer.rar_Applet_Java_

    2. **Scribble.java**:可能是一个基础的绘图Applet,让用户能够在网页上画图。可能包含了图形绘制、颜色选择、撤销重做等功能,展示了Java Applet的基础用法。 3. **ScribbleCutAndPaste.java**:此文件可能扩展了...

    JAVA程序设计期末试题及答案.doc

    12. **Applet绘图**:在Java Applet中,通常需要重写`paint()`方法来进行画图操作。 13. **源文件结构**:正确的源文件结构应为:先package,然后import,最后是类定义,即`package, import, class`。 14. **数据...

    java编程100例

    实例81 留言板程序 实例82 客户登录Servlet小程序 实例83 访问权限控制 实例84 产生密钥 实例85 对称加密 实例86 非对称加密 实例87 数字签名 实例88 数字证书 实例89SSL及HTTPS协议 实例90 Screen小程序 实例91 ...

    java练习题1[参考].pdf

    14. **在 Applet 中画图、画图像、显示字符串用到的方法是()** - **知识点**: Java Applet 中绘制图形的方法。 - **解析**: 正确答案为 A。`paint()` 方法用于在 Applet 中绘制图形、图像和显示字符串。 15. *...

    JAVA填空题复习题7.pdf

    33. **Applet方法**:在Applet中,添加组件用add()方法,画图和显示字符用draw()方法。 以上是Java填空题复习题中的主要知识点,涵盖了面向对象、语法特性、数据类型、异常处理、类与对象、包和接口等多个方面。...

    Java典型模块

    23.3 知识点扩展——MyEclipse开发环境对Applet程序的支持 23.3.1 MyEclipse开发环境对Applet项目的支持 23.3.2 MyEclipse开发环境对JAR的支持 23.4 小结 第24章 动画播放项目(音频操作+多线程) 24.1 动画播放原理...

    2011最新整理Java练习题

    **题目**:在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的哪个方法来完成一些画图操作? - A) start() - B) stop() - C) init() - D) paint() **解析**:在Applet中,`paint()`方法用于绘制图形,...

    Windows下的可执行文件

    - **pbrush.exe**: 画图工具。 - **ping.exe**: 测试网络连通性的工具。 - **progman.exe**: Windows 3.x环境下的程序管理器。 - **qfecheck.exe**: 系统更新检查工具。 - **regedit.exe**: 注册表编辑器。 - **...

    2021-2022计算机二级等级考试试题及答案No.13958.docx

    26. "画图"软件:Windows 98的附件中包含"画图"程序,用于创建、编辑和查看图片。 27. 局域网与广域网:局域网通常提供高有效性且可靠性高,相比之下,广域网可能在覆盖范围更广的同时牺牲一部分效率和可靠性。 28...

    疯狂JAVA讲义

    11.7.1 画图的实现原理 418 11.7.2 使用Graphics类 419 11.8 处理位图 425 11.8.1 Image抽象类和BufferedImage实现类 425 11.8.2 使用ImageIO输入/输出位图 427 11.9 剪贴板 432 11.9.1 数据传递的类...

    java期末考试复习题及答案.doc

    因此,如果需要在Applet中实现自定义的画图功能,应该重写`paint`方法。 #### 十三、Java源文件的结构 - **知识点**: Java源文件的组织结构。 - **解析**: Java源文件的结构通常按照`package`, `import`语句,然后...

    手机游戏五子棋-J2ME

    在J2ME中,MIDlet是手机应用程序的基本单元,类似于Java SE中的Application或Applet。一个MIDlet通常由一个主类和若干辅助类组成,负责应用程序的生命周期管理。在"手机游戏五子棋"中,MIDlet类可能是整个游戏的入口...

    java实训材料

    通过这个项目,你可以掌握如何构建交互式应用,并学习到游戏规则的程序化表示。 2. **计算器**:这是一个简单的计算工具,涵盖了基本的加减乘除以及可能的科学计算功能。它涉及到了控制台输入输出、运算符优先级...

    JAVA期末考试复习试题.docx

    12. **Applet 绘图方法**:在自定义的 Applet 子类中,通常需要重载 `paint()` 方法来进行画图操作,答案是 `D)paint( )`。 13. **源文件结构**:正确的顺序是先 `package`,然后是 `import`,最后是 `class`,...

    java经典选择题100例及答案.docx

    12. 在JavaApplet程序中,通常需要重载父类的(D)paint()方法来进行画图操作。 13. 正确的顺序是(A)package, import, class。首先定义包,然后导入所需类,最后定义类。 14. 非法的是(B)float f=45.0; 因为...

Global site tag (gtag.js) - Google Analytics