(98)Menu简单文本编辑器实现功能:文件打开,保存,退出

这里写图片描述
Menu中既可以添加Menu,也可以添加MenuItem
注意menu:可添加在menubar中或者menu中(添加在menu中形成子菜单)
menuItem:添加在menue中
menubar:添加在Frame中

需求:建立如下窗体,并实现菜单的功能
这里写图片描述
MenuItem:类中有监听器:public void addActionListener(ActionListener l),所以MenueItem以及其子类都可以用此监听器

import java.awt.*;
import java.awt.event.*;
public class MyMenueDemo {

    private Frame f;
    private MenuBar mb;
    private Menu m,subMenu;
    private MenuItem closeItem,subItem;
    MyMenueDemo(){
        init();
    }
    public void init() {
        f=new Frame("my Window");
        f.setBounds(300, 100, 500, 600);
        f.setLayout(new FlowLayout());

        mb=new MenuBar();

        m=new Menu("文件");

        subMenu=new Menu("子菜单");

        subItem=new MenuItem("子菜单项");
        closeItem=new MenuItem("退出");

        subMenu.add(subItem);

        m.add(subMenu);
        m.add(closeItem);
        mb.add(m);

        f.setMenuBar(mb);
        myEvent();

        f.setVisible(true);


    }

    public void myEvent() {

        closeItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        f.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }

        });
    }
}   

这里写图片描述
需求:希望能够创建一个“打开”对话框,就像word–>文件—>打开,弹出的对话框一样。
在Dialog子类FileDialog就可以实现这个功能(调用window窗口),方便了变成开发。
FileDialog类显示一个对话框窗口,用户可以从中选择文件。
public FileDialog(Frame parent,String title, int mode):根据mode的选取不同可以打开文件或者保存文件

这里写图片描述
TextArea类中
public void append(String str)将给定文本追加到文本区的当前文本。

import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenueDemo {

    private Frame f;
    private MenuBar bar;
    private TextArea  ta;
    private Menu fileMenu;
    private MenuItem closeItem,openItem,saveItem;
    private FileDialog openDia,saveDia;

    private File file;
    MyMenueDemo(){
        init();
    }
    public void init() {
        f=new Frame("my Window");
        f.setBounds(300, 100, 500, 600);
        //不设置布局,默认四周式,只有一个组件TextArea ,会显示整个窗体,也比较合理

        bar=new MenuBar();

        fileMenu=new Menu("文件");
        closeItem=new MenuItem("退出");
        openItem=new MenuItem("打开");
        saveItem=new MenuItem("保存");
        ta=new TextArea();

        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(closeItem);
        bar.add(fileMenu);
        f.setMenuBar(bar);
        f.add(ta);

        openDia=new FileDialog(f,"我要打开",FileDialog.LOAD);
        saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE);

        myEvent();

        f.setVisible(true);


    }
    public void myEvent() {

        openItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                openDia.setVisible(true);
                String str=openDia.getFile();//获取选中的文件名称
                String dir=openDia.getDirectory();//获取目录

                if(str==null||dir==null)//用户不想打开文件
                    return;
                ta.setText("");//将之前的文件的文本删除
                 file=new File(dir,str);
                BufferedReader br=null;
                try 
                 {
                    //将硬盘上的文件内容写到文本区域中
                    br=new BufferedReader(new FileReader(file));
                    String len=null;
                      try 
                      {
                         while((len=br.readLine())!=null)
                         {
                          ta.append(len+"\r\n");


                          }

                      } 
                      catch (IOException e1)
                     {

                        e1.printStackTrace();
                      }
                  } 
                 catch (FileNotFoundException e1)
                 {

                    e1.printStackTrace();
                 }
                finally
                {

                    try 
                    {
                        br.close();
                    } 
                    catch (IOException e1)
                    {

                        e1.printStackTrace();
                    }

                }



            }
        });


        closeItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        saveItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                if(file==null) 
                {
                   saveDia.setVisible(true);

                   String str=saveDia.getFile();
                   String dir=saveDia.getDirectory();
                   System.out.println(dir+"------------"+str);//用户文件保存位置
                   if(dir==null||str==null)//新写的文件没保存
                       return ;
                   file=new File(dir,str);
                }
                BufferedWriter bufw=null;
                try 
                {

                     bufw=new BufferedWriter(new FileWriter(file));

                    String text=ta.getText();//从文本区域中获取数据,写入文件中
                    bufw.write(text);
                    bufw.flush();

                } 
                catch (IOException e1) 
                {

                    throw new RuntimeException("没这文件");
                }
                finally{
                    try 
                    {
                        bufw.close();
                    } 
                    catch (IOException e1)
                    {

                        e1.printStackTrace();
                    }

                }

            }
        });


        f.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }

        });



    }



}
posted @ 2017-07-27 19:07  测试开发分享站  阅读(190)  评论(0编辑  收藏  举报