输入流输出流主要作用是保存数据,读取数据,作用是可以保存自己的画过的东西,还可以用于数据加密,在写进数据时给出一个规则,在读取数据时利用你规则就可以读出数据,否则数据就是一堆乱码
初步小结,日后在大总结
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(); } } } }; }