A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 以梦为码 中级黑马   /  2015-7-16 19:11  /  552 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.awt.*;
import java.awt.event.*;
import java.io.*;
//图形界面项。模拟记事本
//只是模拟了打开文件和保存文件
class Note{
       
private Frame frm;
private MenuBar bar;
private Menu  menu1,menu2;
private MenuItem open,save;
private TextArea  text;
private FileDialog fd;
private File file;
private static final int width=Toolkit.getDefaultToolkit().getScreenSize().width;
private static final int height=Toolkit.getDefaultToolkit().getScreenSize().height;
public void  NoteDemo(){
frm=new Frame("模拟记事本");
frm.setSize(700, 650);//设置窗口大小
frm.setLocation((width-700)/2, (height-650)/2);//使窗口在屏幕在中间显示
frm.setLayout(null);//窗口样式为null
frm.setVisible(true);//使窗口显示
//菜单栏初始化
bar=new MenuBar();
frm.setMenuBar(bar);//窗口添加菜单栏
//初始化菜单
menu1=new Menu("文件");
bar.add(menu1);
menu2=new Menu("编辑");
bar.add(menu2);
//初始化菜单项
open =new MenuItem("打开");
menu1.add(open);
save=new MenuItem("保存");
menu1.add(save);
//多行文本初始化
text=new TextArea();
text.setSize(680, 588);
text.setLocation(10, 53);
text.setBackground(Color.green);
frm.add(text);
event();
  }
//定义方法添加事件
private void event(){
        open.addActionListener(new ActionListener(){//活动监听
                public void actionPerformed(ActionEvent e){
                        //创建文件对话框的对象
                        fd=new FileDialog(frm,"打开文件");
                        fd.setVisible(true);
                        //获取用户选择的路径
                        String dir=fd.getDirectory();
                        //获取用户选择的文件
                        String fileName=fd.getFile();
                        //如果用户点击的是取消,路径和文件 获取都是null
                        if(dir==null||fileName==null){
                                //结束方法
                                return;
                        }
                        //如果用户点击了文件,点击打开,IO读取文件
                        //将路径和文件名封装成File对象
                        file=new File(dir,fileName);
                        openFile(file);
                }
        });
        //多行文本添加键盘事件
        text.addKeyListener(new KeyAdapter(){
                public void keyPressed(KeyEvent e){
                        System.out.println("键盘按下");
                }
        });
        frm.addWindowListener(new WindowAdapter(){//添加事件监听,关闭窗口
                public void windowClosing(WindowEvent e){
                        System.exit(0);
                }
        });
       
        //保存菜单项添加活动事件
        save.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){               
                        //判断成员变量file是不是空,如果是空,开启对话框
                        if(file==null){
                                //创建对话框,开启对话框
                                fd=new FileDialog(frm,"保存文件",FileDialog.SAVE);
                                fd.setVisible(true);
                        }
                        //获取用户选择的路径
                        String dir=fd.getDirectory();
                        String fileName=fd.getFile();
                        //对路径和文件名非空判断
                        if(dir==null||fileName==null){
                                return;
                        }
                        //路径和文件名封装File对象
                        file =new File(dir,fileName);
                        //调用写入文件方法
                        saveFile(file);
                }
               
        });
}
        //定义方法,保存方法,
        //打印流
        private void saveFile(File file){
        //使用打印流,将多行文本中的数据打印到文件中
                PrintWriter pw=null;
                try{
                pw=new PrintWriter(new FileWriter(file),true);
                //获取多行文本内容
                String s=text.getText();
                pw.println(s);
                }catch(IOException e){
                        throw new RuntimeException("保存失败");
                }finally{
                                pw.close();
                       
                }
               
        }

//定义方法,打开文件,读取文件
private void openFile(File file){
        //字符缓冲区BufferReader读取
        //读取一行,就在多行文本中,添加一行
        BufferedReader br=null;
        try{
        br=new BufferedReader(new FileReader(file));
        String len=null;
        //清空多行文本
        text.setText("");
        while((len=br.readLine())!=null){
                text.append(len+"\r\n");//读到\r\n换行
        }
        }catch(IOException e){
                throw new RuntimeException("文件打开失败");
        }finally{
                try{
                        if(br!=null)
                                br.close();
                }catch(IOException e){
                        throw new RuntimeException("关闭资源失败");
     }
        }
  }
}


public class Notepad {
        public static void main(String[] args) {
   new Note().NoteDemo();

        }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马