GUI中保存文件和打开文件

   一、问题描述

  创建一个简单的记事本,包括打开,保存,退出菜单并能实现其操作。

二、思路


 1、创建Frame窗体,对窗体进行基本设置 比如:大小,位置,布局

         (1)创建Frame窗体:Frame f = new Frame("my window");

         (2)对窗体设置大小:f.setBounds(x, y, width, height);

         (3)设置窗体布局:f.setLayout(new FlowLayout());

 2、先建立菜单栏,再建立“文件”菜单添加到菜单栏,并建立“打开”,”保存“,“退出”菜单项添加到菜单;

           (1)创建菜单栏 MenuBar  mb = new MenuBar();
           (2)创建菜单Menum = new Menu("文件");

           (3)创建菜单项 
                MenuItem  saveItem = new MenuItem("保存");
MenuItemopenItem = new MenuItem("打开");
MenuItemcloseItem = new MenuItem("退出");
           (4)将菜单项添加到菜单
               m.add(openItem);
               m.add(saveItem);
               m.add(closeItem);
           (5)将菜单添加到菜单栏

                mb.add(m);
           (6)将菜单栏添加到窗体
               f.setMenuBar(mb);

 3、设置动作监听事件,保存,打开,退出。

 4、让窗体显示,通过setVisible(true)

三、具体代码实现

import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest 

{
private Frame f;
private TextArea ta;
private MenuBar mb;
private Menu m;
private MenuItem closeItem, saveItem, openItem;
private FileDialog openDia, saveDia;
private File file;


MyMenuTest() 

        {
init();
}
public void init() 

{f = new Frame("my window"); // 建立一个窗口
f.setBounds(300, 100, 500, 600);// 设大小位置

mb = new MenuBar();//创建菜单栏
ta = new TextArea();//创建文本区域
m = new Menu("文件");//创建菜单


saveItem = new MenuItem("保存");//创建保存菜单项
openItem = new MenuItem("打开");//创建打开菜单项
closeItem = new MenuItem("退出");//创建退出菜单项

//将保存、打开、退出菜单项添加到菜单中
m.add(openItem);
m.add(saveItem);
m.add(closeItem);

mb.add(m);将菜单项添加到菜单栏

f.setMenuBar(mb);//将菜单栏添加到窗体
f.add(ta);//将文本区域添加到窗体

openDia = new FileDialog(f, "我要打开", FileDialog.LOAD);// 此常量值指示文件对话框窗口的作用是查找要读取的文件。
saveDia = new FileDialog(f, "我要打开", FileDialog.SAVE);//这里必须是文件对话框, 因为Dialog中没有获取目录和文件的方法,此常量值指示文件对话框窗口的作用是查找要写入的文件。
myEvent();//监听事件
f.setVisible(true);//设置窗体可见
}


private void myEvent()//封装所有窗体

 {//保存事件监听 

saveItem.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) 

{  if (file == null)  //判断文件是否存在

 {saveDia.setVisible(true);//设置保存对话框可见
  String dirPath = saveDia.getDirectory();//定义文件路径
  String filename = saveDia.getFile();//定义文件名
  if (dirPath == null || filename == null) return;//如果路径或者文件名为空,直接返回
  file = new File(dirPath, filename);//创建文件
}

try {

BufferedWriter bufw = new BufferedWriter(new FileWriter(file));//创建带缓冲区的写入流对象
String text = ta.getText();//定义字符串,获取文本内容
bufw.write(text);//将内容写入到缓冲区
bufw.close();//关闭缓冲区

catch (IOException ex) //异常处理

{

throw new RuntimeException();
}}});
openItem.addActionListener(new ActionListener() {//打开事件监听
  public void actionPerformed(ActionEvent e) 

{ openDia.setVisible(true);
  ta.setText("");//清空文本区域的内容
 String dirPath = openDia.getDirectory();
 String filename = openDia.getFile();
 if (dirPath == null || filename == null) return;
 file = new File(dirPath, filename);
 try { 

BufferedReader bufr = new BufferedReader(new FileReader(file)); //创建带缓冲区的读取流对象
String line = null;
while ((line = bufr.readLine()) != null) //循环读取

ta.append(line + "\r\n");//添加到文本区域

bufr.close();//关闭缓冲区

catch (IOException e1) 

throw new RuntimeException("读取失败");
}}});
closeItem.addActionListener(new ActionListener()//退出监听事件

 {public void actionPerformed(ActionEvent e)

 {

System.exit(0);//退出命令。结束程序
}});
f.addWindowListener(new WindowAdapter() //窗体监听事件

 {public void windowClosing(WindowEvent e) 

{System.exit(0);}});
}

public static void main(String[] args)

{
 new MyMenuTest();//创建一个MyMenuTest对象
}
}

四、总结 

 本体涉及内容

  1、GUI中一些基本对象的创建,例如创建Frame窗体,菜单栏,菜单,菜单项,文本区域等对象。

  2、设置对象的一些监听事件,例如窗体监听事件,菜单项中保存,退出,修改一些监听事件。

  3、IO流中缓冲区:为了提高效率使用了BufferedReader、BufferedWriter

               

猜你喜欢

转载自blog.csdn.net/u011638706/article/details/40348533
今日推荐