- 开篇之闲谈: 前一段时间因为自身的一些事情自己的一些问题,好久没有写博客.这两天跟身边的好哥们聊聊天之后顿时觉得豁然开朗,同时也认识到了自身的问题.所以不管怎么说既来之则安之吧,既然选择了这条道路也许是没有尽头的一条路,不过还要是一如既往的坚持到底......
- 该类代码写的可能比较多吧,写该类的时候自己的思路就是,个人的理解就是文件就是一个输入流输出流,然后输入流就调用read();方法即可,可以实现打开文件的功能.但是在打开一个文件之前首先实现的文件的保存,保存要用的方法就是write();方法.
- 写该类的时候遇到问题就是怎么判断自己画线还是画圆,而且在打开保存的时候到底打开的是线还是圆,这是就要加一个标志符了,标识符后要紧跟着自己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);
}
} - 这里写了一个父类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;
}
}
相关推荐
五、文件保存 1. 使用`Close`语句:关闭文件以保存更改。`Close`语句接受一个可选的“文件号”,如果省略,则关闭所有打开的文件。 ```vb Close #fileNum ``` 2. 如果在读写过程中发生错误,VB可能会自动进行错误...
在这个“QT4文本文件保存打开例程源代码”中,我们可以学习到如何在QT4环境中处理文本文件,包括打开、保存、读取和写入的基本操作。以下是对这些知识点的详细讲解: 1. **QFileDialog**: QFileDialog是QT4中的一个...
在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)中实现本地图像文件的打开与保存功能。WPF是.NET Framework的一部分,提供了一种强大的UI开发平台,支持丰富的图形、媒体和交互设计。 首先...
"Java设置打开或保存文件的对话框的文件类型选择" Java中,设置打开或保存文件对话框的文件类型选择是非常重要的。通过使用FileNameExtensionFilter类,可以设置对话框中显示的文件类型。下面将详细介绍如何使用...
对于文件保存,可以使用`CFile::modeCreate | CFile::modeWrite`标志创建并写入新文件: ```cpp if (!file.Open("example.txt", CFile::modeCreate | CFile::modeWrite)) { // 错误处理 } file.Write("Hello, ...
例如,当用户点击“保存”时,我们可以打开一个`QFileDialog`,获取选定的文件路径,然后使用`QFile`的`open()`方法打开文件,接着通过`QTextStream`将窗口内容写入文件。 对于“删除”、“剪切”和“复制”这些...
6. **文件保存对话框**:与打开文件类似,`JFileChooser`也可以用于保存文件。只需将`showOpenDialog`替换为`showSaveDialog`。 7. **异常处理**:在进行文件操作时,必须考虑可能出现的异常,如`...
最后,为了增强程序的灵活性和可扩展性,可以考虑实现一个简单的图形用户界面(GUI),让用户能够直接在程序中绘制图形,然后将其保存为DXF文件。这可能涉及Windows API或者MFC(Microsoft Foundation Classes)的...
3. **读取图形数据**:在记录集中找到含有图像数据的记录,通过`ADODB::Stream`对象,我们可以从BLOB字段读取二进制数据,并将其保存为图片文件。`Stream`对象可以处理二进制数据,将其读取到内存中,然后用适当的...
在本项目中,“java实现的简单图形化文件系统模拟”是一个用Java编程语言构建的简易文件管理系统,旨在帮助初学者理解和实践操作系统中的文件系统概念。这个系统提供了基本的文件和目录操作,包括打开、关闭、保存...
在VC++编程环境中,生成图形文件预览是一项实用的功能,特别是在设计用户界面...通过以上步骤,你就可以在VC++的文件打开对话框中实现图形文件的实时预览,使用户在选择文件时能够更直观地看到内容,从而提高工作效率。
在Java编程语言中,处理文本文件是常见...综上所述,这个Java程序可能是一个简单的文本编辑器,提供了基本的文件操作功能,包括创建、打开、复制和剪切文本文件。理解这些概念对于任何Java开发者来说都是基础且重要的。
文件保存操作 定义了 `readFile()` 方法来保存文件: ```java private void readFile() { String fileName; fc.setDialogTitle("保存"); try { flag = fc.showSaveDialog(frm); } catch (HeadlessException ...
它提供了一系列实用功能,包括文件操作(打开、保存、新建)以及图形编辑选项(如改变画笔颜色和清除画布)。下面将详细介绍这些功能及其背后的Java技术。 首先,让我们探讨Java的图形用户界面(GUI)编程。在Java...
### 修复CAD图形文件无效(无法打开)文件损坏的多种策略 #### 1. **应对文件错误时的即时反应** 当CAD图形文件出现错误时,系统通常会弹出一个提示询问用户是否保存当前状态。此时,正确的做法是选择**不保存**。...
在这个“数据保存.rar”压缩包中,包含了一个名为“数据保存.vi”的VI(Virtual Instrument),它显然是用来演示或实现如何在LabVIEW中保存数据到TXT文件中的。下面,我们将深入探讨LabVIEW的数据保存机制,以及如何...
- CommonDialog控件是VB6.0提供的一种标准控件,它简化了与用户交互的常见对话框操作,如打开、保存文件对话框。通过设置其属性(如`CancelError`、`Filter`等)和调用`ShowOpen`或`ShowSave`方法,可以显示相应的...
它会在启动时打开,显示所有打开的图形文件,但不包括图形临时保存文件(SV$)。图形文件(DWG)、图形样板文件(DWT)和图形标准文件(DWS)都是会被显示的。 2. 使用`RECOVER`命令可以检查并修复图形文件中的错误...
- 打开文件:使用C语言的`fopen`函数打开BMP文件,通常以二进制模式("rb")进行读取。 - 读取文件头:提取文件类型的标识(如'BM'),确保文件是BMP格式。然后读取文件大小和其他字段,确认文件完整。 - 读取...
5. **BMP文件保存**: 要将预览的图像保存为BMP文件,我们需要理解BMP文件格式,它是一个未经压缩的位图格式,包含图像的宽度、高度、色彩深度和像素数据。可以使用GDI+或者Windows API函数来创建BMP文件。首先,...