输入流输出流小结

输入流输出流主要作用是保存数据,读取数据,作用是可以保存自己的画过的东西,还可以用于数据加密,在写进数据时给出一个规则,在读取数据时利用你规则就可以读出数据,否则数据就是一堆乱码

初步小结,日后在大总结

package FrameIO20130920;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class drawDrame extends JFrame{
	ImageIcon con=new ImageIcon("images/picture.jpg");
	private BufferedImage  image01;
	//定义坐标属性
	private int x1,y1,x2,y2;
	//画布属性
	private Graphics g;
	private Color color;
	//标志
	private String drawCmd="line";
	//shaape队列
	ArrayList<Shape> lineList=new ArrayList<Shape>();
	//函数入口
	public static void main(String[] args){
		drawDrame frame=new drawDrame();
		frame.showUI();
	}
	//构造初始化界面的方法
	public void showUI(){
		this.setTitle("保存文件");
		this.setSize(800,600);
		this.setDefaultCloseOperation(3);
		JMenuBar bar=new JMenuBar();
		JMenu menu=new JMenu("文件");
		JMenu menu01=new JMenu("图片");
		JMenuItem drawLine=new JMenuItem("画线");
		JMenuItem drawCircle=new JMenuItem("画圆");
		JMenuItem openItem=new JMenuItem("打开");
		JMenuItem saveItem=new JMenuItem("保存");
		JMenuItem closeItem=new JMenuItem("关闭");
		JMenuItem drawpic=new JMenuItem("画图片");
		JMenuItem savepic=new JMenuItem("保存图片");
		JMenuItem openpic=new JMenuItem("打开图片");
		menu.add(drawLine);
		menu.add(drawCircle);
		menu.add(openItem);
		menu.add(saveItem);
		menu.add(closeItem);
		menu01.add(drawpic);
		menu01.add(savepic);
		menu01.add(openpic);
		bar.add(menu);
		bar.add(menu01);
		this.setJMenuBar(bar);
		this.setVisible(true);
		g=this.getGraphics();
		//加事件监听器
		saveItem.addActionListener(menuListener);
		openItem.addActionListener(menuListener);
		drawLine.addActionListener(menuListener);
		drawCircle.addActionListener(menuListener);
		drawpic.addActionListener(menuListener);
		savepic.addActionListener(menuListener);
		openpic.addActionListener(menuListener);
		//鼠标监听器
		this.addMouseListener(new MouseListener() {
			public void mouseReleased(MouseEvent e) {
				x2=e.getX();
				y2=e.getY();
				if(drawCmd.equals("line")){
				Random random=new Random();
				//随机色彩
				color=new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
				Line line=new Line();
				line.setX1(x1);
				line.setY1(y1);
				line.setX2(x2);
				line.setY2(y2);
//				line.setColor(color);
				g.drawLine(x1, y1, x2, y2);
				lineList.add(line);
				}else if(drawCmd.equals("circle")){
					g.drawOval(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
				}
			}
			@Override
			public void mousePressed(MouseEvent e) {
				 x1=e.getX();
				 y1=e.getY();
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		
	}
	//实例化事件监听器对象
	ActionListener menuListener=new ActionListener() {
		
		public void actionPerformed(ActionEvent e) {
			String cmd=e.getActionCommand();
			if("画线".equals(cmd)){
				drawCmd="line";
			}else if("画圆".equals(cmd)){
				drawCmd="circle";
			}
			if("保存".equals(cmd)){
				try {
					java.io.FileOutputStream fos=new FileOutputStream("D:/draw02.dat");
					DataOutputStream dos=new DataOutputStream(fos);
					//把总线条的数量放在第一个位置
					dos.writeInt(lineList.size());
					for(int i=0;i<lineList.size();i++){
						Shape shape=lineList.get(i);
						//判断shape是什么类型
						if(shape instanceof Line){
							//用数据1表示线段数据
							dos.writeInt(1);
							Line line=(Line)shape;
							dos.writeInt(line.getX1());
							dos.writeInt(line.getY1());
							dos.writeInt(line.getX2());
							dos.writeInt(line.getY2());
//							dos.writeInt(line.getColor().getRGB());
						}else if(shape instanceof Circle){
							//用数据2表示画圆
							dos.writeInt(2);
							Circle circle=(Circle)lineList.get(i);
						}
					}
					//画完再关闭!!!!
					dos.close();
					fos.close();//关闭数据流
					System.out.println("保存成功");
				} catch (Exception e1) {
					e1.printStackTrace();
				}
				
			}
	
			if("打开".equals(cmd)){
				try {
					java.io.FileInputStream fis=new FileInputStream("D:/draw02.dat");
					DataInputStream dis=new DataInputStream(fis);
					//把总线条的数量放在第一个位置
					int total=dis.readInt();
					for(int i=0;i<total;i++){
						int type=dis.readInt();
						if(type==1){
							
							Line line=new Line();
							line.setX1(dis.readInt());
							line.setY1(dis.readInt());
							line.setX2(dis.readInt());
							line.setY2(dis.readInt());
//							line.setColor(new Color(dis.readInt()));
//						刚开始只画一条线							
//						x1=dis.readInt();
//						y1=dis.readInt();
//						x2=dis.readInt();
//						y2=dis.readInt();
//							g.setColor(line.getColor());
							g.drawLine(line.getX1(),line.getY1(),line.getX2(),line.getY2());
						}else if(type==2){
							Circle circle=new Circle();
							}
						}
					dis.close();
					fis.close();//关闭数据流
					System.out.println("打开成功");
				} catch (Exception e1) {
					e1.printStackTrace();
				}
			}
			/********图片类处理************/
			if("画图片".equals(cmd)){
				//缓冲图像,是一张白纸,实为窗体
				image01=new BufferedImage(con.getIconWidth(), con.getIconHeight(), BufferedImage.TYPE_INT_RGB);
				Graphics g2=image01.getGraphics();
//				g2.fillOval(100, 100, 100, 100);
				//白纸上上画图片
				g2.drawImage(con.getImage(), 0, 0, null);
				//白纸画到窗体上
				g.drawImage(image01, 0, 0, null);
			}
			if("打开图片".equals(cmd)){
//				java.io.FileInputStream fis;
				try {
					java.io.FileInputStream fis = new FileInputStream("D:/pic.txt");
					java.io.DataInputStream dis=new DataInputStream(fis);
					int wide=dis.readInt();
					int height=dis.readInt();
					for(int i=0;i<wide;i++){
						for (int j=0;j<height;j++){
//							dis.readInt();
//							g.setColor(new Color(dis.readInt()));
							g.setColor(new Color(dis.readInt()));
							g.drawLine(i+200, j+200, i+200, j+200);
						}
					}
					System.out.println("打开图片成功");
				} catch (Exception e1) {
					e1.printStackTrace();
				}
			}
			if("保存图片".equals(cmd)){
				try {
					java.io.FileOutputStream fos=new FileOutputStream("D:/pic.txt");
					java.io.DataOutputStream dos=new DataOutputStream(fos);
					int width=image01.getWidth();
					int height=image01.getHeight();
					dos.writeInt(width);
					dos.writeInt(height);//写入四个字节
					for(int x=0;x<width;x++){
						for(int y=0;y<height;y++){
							//把点的色彩存入文件
//							System.out.println("写点1");
							dos.writeInt(image01.getRGB(x, y));
//							System.out.println("写点2");
						}
					}
					dos.close();
					fos.close();
					System.out.println("保存图片成功");
				} catch (Exception e1) {
					e1.printStackTrace();
				}
			}
		}
	};
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值