`
不平凡的人
  • 浏览: 35701 次
  • 性别: Icon_minigender_1
  • 来自: 嘉峪关
社区版块
存档分类
最新评论

文件保存打开简单的图形

阅读更多
  1. 开篇之闲谈:  前一段时间因为自身的一些事情自己的一些问题,好久没有写博客.这两天跟身边的好哥们聊聊天之后顿时觉得豁然开朗,同时也认识到了自身的问题.所以不管怎么说既来之则安之吧,既然选择了这条道路也许是没有尽头的一条路,不过还要是一如既往的坚持到底......
  2. 该类代码写的可能比较多吧,写该类的时候自己的思路就是,个人的理解就是文件就是一个输入流输出流,然后输入流就调用read();方法即可,可以实现打开文件的功能.但是在打开一个文件之前首先实现的文件的保存,保存要用的方法就是write();方法.
  3. 写该类的时候遇到问题就是怎么判断自己画线还是画圆,而且在打开保存的时候到底打开的是线还是圆,这是就要加一个标志符了,标识符后要紧跟着自己read()或是write()的方法.

    package cgh20130720文件保存打开图形;

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;

    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JSeparator;

    /**
    * 定义一个图形界面类对象继承自JFrame
    *
    * @author Allen
    *
    */
    public class FileFrame extends JFrame {

    public static void main(String[] args) {
    // 创建一个对象调用窗体初始化的方法
    FileFrame ff = new FileFrame();
    ff.INtUI();
    }

    // 定义一个数组队列保存坐标信息
    public List<Shape> list = new ArrayList<Shape>();

    // 图形对象的属性
    private Shape shape;
    private Graphics g;

    // 判断变量的标志
    private int type;

    private int x1, y1;
    private int x2, y2;

    // 初始化一个界面的方法
    public void INtUI() {

    /*
    * 调用窗体的方法
    */
    this.setTitle("永不消失的图形");
    this.setSize(650, 500);
    this.setResizable(false);
    this.setLocationRelativeTo(null);

    // 创建一个面板对象
    JPanel jp = new JPanel();
    jp.setPreferredSize(new Dimension(645, 45));
    jp.setLayout(new FlowLayout(FlowLayout.LEFT));

    // 创建按钮栏对象
    JMenuBar jmenub = new JMenuBar();
    // 创建菜单选项
    JMenu jmenu = new JMenu("文件");
    // 添加菜单到菜单栏
    jmenub.add(jmenu);

    /*
    * 创建子菜单选项
    */
    JMenuItem jmenui = new JMenuItem("打开");
    // 菜单子项添加监听器
    ActionListener al = new ActionListener() {

    public void actionPerformed(ActionEvent e) {
    System.out.println("你输出的是: " + e.getActionCommand());
    // 判断执行的按钮
    if (e.getActionCommand().equals("保存")) {

    // 文件及数据输出流
    try {
    java.io.FileOutputStream fio = new java.io.FileOutputStream(
    "G:/图形界面类的打开.txt");
    java.io.DataOutputStream das = new java.io.DataOutputStream(
    fio);

    // 队列中所有图形的个数
    int count = list.size();
    // 将图形个数写入文件
    das.writeInt(count);

    // 循环遍历图形
    for (int i = 0; i < count; i++) {
    shape = list.get(i);//遍历得到图形

    if (shape instanceof Line) {
    /*
    * 将画出的直线坐标写入文件
    */
    das.writeInt(1);
    das.writeInt(shape.getX1());
    das.writeInt(shape.getY1());
    das.writeInt(shape.getX2());
    das.writeInt(shape.getY2());
    das.writeInt(shape.getColor().getRGB());

    }

    if (shape instanceof Cycle) {
    /*
    * 将画出的圆的坐标写入文件
    */
    das.writeInt(2);
    das.writeInt(shape.getX1());
    das.writeInt(shape.getY1());
    das.writeInt(shape.getX2());
    das.writeInt(shape.getY2());
    das.writeInt(shape.getColor().getRGB());

    }
    }
    // 写完数据后关闭输出流
    das.close();

    } catch (Exception e1) {

    e1.printStackTrace();
    }
    }

    // 判断点击的按钮
    if (e.getActionCommand().equals("打开")) {

    try {
    // 文件及数据的输入流
    java.io.FileInputStream fin = new java.io.FileInputStream(
    "G:/图形界面类的打开.txt");
    java.io.DataInputStream dai = new java.io.DataInputStream(
    fin);

    // 读出图形的个数
    int count = dai.readInt();
    System.out.println(count);
      
    // 循环遍历图形
    for (int i = 0; i < count; i++) {

    type = dai.readInt();//判断标志
    System.out.println("读到的type " + type);
    /**
    * 读出写入文件的信息
    */
    if (type == 1) {
    int x1 = dai.readInt();
    int y1 = dai.readInt();
    int x2 = dai.readInt();
    int y2 = dai.readInt();
    int rgb = dai.readInt();
    System.out.println("读到的x1坐标是: "+x1);
    g.setColor(new Color(rgb));
    g.drawLine(x1, y1, x2, y2);// 画直线
    }

    if (type == 2) {
    /**
    * 读出写入文件的信息
    */
    int x1 = dai.readInt();
    int y1 = dai.readInt();
    int x2 = dai.readInt();
    int y2 = dai.readInt();
    int rgb = dai.readInt();
    g.setColor(new Color(rgb));
    g.drawOval(x1, y1, Math.abs(x2 - x1), Math
    .abs(y2 - y1));// 画圆
    }
    }

    // 读完后关闭输入流
    dai.close();
        } catch (Exception e1) {

    e1.printStackTrace();
    }

    }
    /*
    * 根据标志符来画图形
    */
    if (e.getActionCommand().equals("画线")) {
    System.out.println("画线判断执行了");
    type = 1;
    }

    if (e.getActionCommand().equals("画圆")) {
    type = 2;
    }

    }
    };

    JMenuItem jmenui1 = new JMenuItem("保存");
    JMenuItem jmenui2 = new JMenuItem("画线");
    JMenuItem jmenui3 = new JMenuItem("画圆");

    /*
    * 添加监听器
    */
    jmenui.addActionListener(al);
    jmenui1.addActionListener(al);
    jmenui2.addActionListener(al);
    jmenui3.addActionListener(al);
    /*
    * 创建水平分隔符对象
    */
    JSeparator js = new JSeparator();
    JSeparator js2 = new JSeparator();
    JSeparator js3 = new JSeparator();
    /*
    * 添加到菜单上
    */
    jmenu.add(jmenui);
    jmenu.add(js);
    jmenu.add(jmenui1);
    jmenu.add(js2);
    jmenu.add(jmenui2);
    jmenu.add(js3);
    jmenu.add(jmenui3);
    // 将菜单栏添加到面板上
    jp.add(jmenub);
    this.add(jp);// 添加面板

            //关闭窗体退出程序
    this.setDefaultCloseOperation(3);
    // 设置窗体可见
    this.setVisible(true);

    // 取得画布对象
    g = this.getGraphics();

    // 给窗体添加监听器
    MouseListener mouse = new MouseListener() {

    public void mouseClicked(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {


    }

    public void mouseExited(MouseEvent e) {


    }

    public void mousePressed(MouseEvent e) {

    x1 = e.getX();// 点击鼠标将得到坐标传给shape对象
    y1 = e.getY();
    }

    public void mouseReleased(MouseEvent e) {
    x2 = e.getX();
    y2 = e.getY();
    // 设置随机数
    Random rand = new Random();
    // 设置画的颜色
    Color cl = new Color((rand.nextInt(256)), (rand.nextInt(256)),
    rand.nextInt(256));

    // 得到颜色
    g.setColor(cl);

    // 当为1的时候画线
    if (type == 1) {
                        //创建一个直线类对象
    shape = new Line();
    /*
    * 将坐标存入直线对象
    */
    shape.setX1(x1);
    shape.setY1(y1);
    shape.setX2(x2);
    shape.setY2(y2);
    shape.setColor(cl);// 直线对象得到颜色
    System.out.println("画线执行了");
    g.drawLine(shape.getX1(), shape.getY1(), shape.getX2(),
    shape.getY2());// 画一条直线

    list.add(shape);//将直线对象添加到队列
    }

    // 当为2的时候画圆
    if (type == 2) {
                        //创建一个圆类的对象
    shape = new Cycle();
    /*
    * 存入圆的坐标
    */
    shape.setX1(x1);
    shape.setY1(y1);
    shape.setX2(x2);
    shape.setY2(y2);
    System.out.println("画圆执行了");
    shape.setColor(cl);// 直线对象得到颜色
    g.drawOval(shape.getX1(), shape.getY1(), Math.abs(shape
    .getX1()- shape.getX2()), Math.abs(shape.getY1()- shape.getY2()));// 画一个圆

    list.add(shape);//将圆添加到队列
    }
    }
    };
    // 窗体上添加监听器
    this.addMouseListener(mouse);
    }
    }
  4. 这里写了一个父类Shape类,后面不管是直线还是圆都是继承该类,这里代码就不用一一写出了;

 package cgh20130720文件保存打开图形;

import java.awt.Color;

/**
 * 定义一个父类shape
 * @author Allen
 *
 */
public class Shape {

//定义一个坐标属性 
private int x1,y1;
private int x2,y2;
//定义颜色属性
private Color color;
/*
 * 定义普通的方法
 */
public int getX1() {
 return x1;
}
public void setX1(int x1) {
 this.x1 = x1;
}
public int getY1() {
 return y1;
}
public void setY1(int y1) {
 this.y1 = y1;
}
public int getX2() {
 return x2;
}
public void setX2(int x2) {
 this.x2 = x2;
}
public int getY2() {
 return y2;
}
public void setY2(int y2) {
 this.y2 = y2;
}
public Color getColor() {
 return color;
}
public void setColor(Color color) {
 this.color = color;
}
}
 

 

分享到:
评论

相关推荐

    VB文件操作(打开,修改,保存)

    五、文件保存 1. 使用`Close`语句:关闭文件以保存更改。`Close`语句接受一个可选的“文件号”,如果省略,则关闭所有打开的文件。 ```vb Close #fileNum ``` 2. 如果在读写过程中发生错误,VB可能会自动进行错误...

    QT4文本文件保存打开例程源代码

    在这个“QT4文本文件保存打开例程源代码”中,我们可以学习到如何在QT4环境中处理文本文件,包括打开、保存、读取和写入的基本操作。以下是对这些知识点的详细讲解: 1. **QFileDialog**: QFileDialog是QT4中的一个...

    Java设置打开或保存文件的对话框的文件类型选择

    "Java设置打开或保存文件的对话框的文件类型选择" Java中,设置打开或保存文件对话框的文件类型选择是非常重要的。通过使用FileNameExtensionFilter类,可以设置对话框中显示的文件类型。下面将详细介绍如何使用...

    wpf实现本地图像文件打开与保存

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)中实现本地图像文件的打开与保存功能。WPF是.NET Framework的一部分,提供了一种强大的UI开发平台,支持丰富的图形、媒体和交互设计。 首先...

    vc++文件的打开和保存

    对于文件保存,可以使用`CFile::modeCreate | CFile::modeWrite`标志创建并写入新文件: ```cpp if (!file.Open("example.txt", CFile::modeCreate | CFile::modeWrite)) { // 错误处理 } file.Write("Hello, ...

    qt window 窗体的实现,包括保存,新建,打开文件,

    例如,当用户点击“保存”时,我们可以打开一个`QFileDialog`,获取选定的文件路径,然后使用`QFile`的`open()`方法打开文件,接着通过`QTextStream`将窗口内容写入文件。 对于“删除”、“剪切”和“复制”这些...

    文件保存、打开java片段

    6. **文件保存对话框**:与打开文件类似,`JFileChooser`也可以用于保存文件。只需将`showOpenDialog`替换为`showSaveDialog`。 7. **异常处理**:在进行文件操作时,必须考虑可能出现的异常,如`...

    VC写DXF文件,主要就是在VS2005环境里,用VC开发的绘图环境,可对绘制的线,矩形等多个图形进行保存为DXF文件格式,然后再用AUTOCAD打开

    最后,为了增强程序的灵活性和可扩展性,可以考虑实现一个简单的图形用户界面(GUI),让用户能够直接在程序中绘制图形,然后将其保存为DXF文件。这可能涉及Windows API或者MFC(Microsoft Foundation Classes)的...

    Access数据库保存图形数据

    3. **读取图形数据**:在记录集中找到含有图像数据的记录,通过`ADODB::Stream`对象,我们可以从BLOB字段读取二进制数据,并将其保存为图片文件。`Stream`对象可以处理二进制数据,将其读取到内存中,然后用适当的...

    java实现的简单图形化文件系统模拟

    在本项目中,“java实现的简单图形化文件系统模拟”是一个用Java编程语言构建的简易文件管理系统,旨在帮助初学者理解和实践操作系统中的文件系统概念。这个系统提供了基本的文件和目录操作,包括打开、关闭、保存...

    VC++ 打开图形文件生成预览

    在VC++编程环境中,生成图形文件预览是一项实用的功能,特别是在设计用户界面...通过以上步骤,你就可以在VC++的文件打开对话框中实现图形文件的实时预览,使用户在选择文件时能够更直观地看到内容,从而提高工作效率。

    java 文本文件 支持新建,打开,复制,剪切...

    在Java编程语言中,处理文本文件是常见...综上所述,这个Java程序可能是一个简单的文本编辑器,提供了基本的文件操作功能,包括创建、打开、复制和剪切文本文件。理解这些概念对于任何Java开发者来说都是基础且重要的。

    java文件打开保存代码收藏

    文件保存操作 定义了 `readFile()` 方法来保存文件: ```java private void readFile() { String fileName; fc.setDialogTitle("保存"); try { flag = fc.showSaveDialog(frm); } catch (HeadlessException ...

    Java 简单图形编辑器

    它提供了一系列实用功能,包括文件操作(打开、保存、新建)以及图形编辑选项(如改变画笔颜色和清除画布)。下面将详细介绍这些功能及其背后的Java技术。 首先,让我们探讨Java的图形用户界面(GUI)编程。在Java...

    修复CAD图形文件无效(无法打开)文件损坏修复方法

    ### 修复CAD图形文件无效(无法打开)文件损坏的多种策略 #### 1. **应对文件错误时的即时反应** 当CAD图形文件出现错误时,系统通常会弹出一个提示询问用户是否保存当前状态。此时,正确的做法是选择**不保存**。...

    数据保存.rar_labview_labview保存文件_labview数据保存_保存数据_数据文件保存

    在这个“数据保存.rar”压缩包中,包含了一个名为“数据保存.vi”的VI(Virtual Instrument),它显然是用来演示或实现如何在LabVIEW中保存数据到TXT文件中的。下面,我们将深入探讨LabVIEW的数据保存机制,以及如何...

    文件管理程序,文件的打开,复制,保存。CommonDialog的应用(VB6.0源代码编写)

    - CommonDialog控件是VB6.0提供的一种标准控件,它简化了与用户交互的常见对话框操作,如打开、保存文件对话框。通过设置其属性(如`CancelError`、`Filter`等)和调用`ShowOpen`或`ShowSave`方法,可以显示相应的...

    AutoCAD高级工程师2006完全考题(400)

    它会在启动时打开,显示所有打开的图形文件,但不包括图形临时保存文件(SV$)。图形文件(DWG)、图形样板文件(DWT)和图形标准文件(DWS)都是会被显示的。 2. 使用`RECOVER`命令可以检查并修复图形文件中的错误...

    bmp位图文件的读取与保存.rar_bmp_bmp save_c bmp_保存 bmp_文件保存bmp

    - 打开文件:使用C语言的`fopen`函数打开BMP文件,通常以二进制模式("rb")进行读取。 - 读取文件头:提取文件类型的标识(如'BM'),确保文件是BMP格式。然后读取文件大小和其他字段,确认文件完整。 - 读取...

    vc++实现多文档预览dwg文件,并且可保存成bmp文件

    5. **BMP文件保存**: 要将预览的图像保存为BMP文件,我们需要理解BMP文件格式,它是一个未经压缩的位图格式,包含图像的宽度、高度、色彩深度和像素数据。可以使用GDI+或者Windows API函数来创建BMP文件。首先,...

Global site tag (gtag.js) - Google Analytics