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

来源:互联网 发布:淘宝冻结资金在哪里看 编辑:程序博客网 时间:2024/05/19 13:07

这里写图片描述
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);            }        });    }}
阅读全文
0 0
原创粉丝点击