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