java实现的简单记事本程序

来源:互联网 发布:mcs51单片机引脚 编辑:程序博客网 时间:2024/04/29 11:29


 

//练习:利用GUI知识,和IO流知识,做一个简单的记事本程序。//代码:package cn.itcast.exercise;import java.awt.FileDialog;import java.awt.Font;import java.awt.Frame;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.TextArea;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;public class Notepad extends Frame {private static final long serialVersionUID = 1L;private MenuItem openMenuItem;// 由于多个方法中都使用, 定义为成员变量private MenuItem saveMenuItem;private MenuItem exitMenuItem;private TextArea textArea;private MenuItem gbkMenuItem;private MenuItem utf8MenuItem;private File file;private String charset = "GBK";public static void main(String []args){new Notepad();}public Notepad() {init();// 初始化generateMenuBar();// 构建菜单栏generateTextArea();// 构建文本域handleMenuItemEvent();// 处理菜单项点击事件setVisible(true);}private void init() {// 初始化, 设置大小和位置, 处理关闭事件setTitle("记事本");setSize(600, 400);setLocation(400, 100);setIconImage(Toolkit.getDefaultToolkit().createImage("300png059.png"));addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}private void generateMenuBar() {MenuBar menuBar = new MenuBar();// 菜单栏Menu fileMenu = new Menu("文件");// 菜单Menu editMenu = new Menu("编辑");Menu viewMenu = new Menu("查看");openMenuItem = new MenuItem("打开");saveMenuItem = new MenuItem("保存");exitMenuItem = new MenuItem("退出");MenuItem copyMenuItem = new MenuItem("复制");MenuItem pasteMenuItem = new MenuItem("粘贴");MenuItem cutMenuItem = new MenuItem("剪切");gbkMenuItem = new MenuItem("GBK");utf8MenuItem = new MenuItem("UTF-8");fileMenu.add(openMenuItem);// 给菜单添加菜单项fileMenu.add(saveMenuItem);fileMenu.addSeparator();// 分隔符fileMenu.add(exitMenuItem);editMenu.add(copyMenuItem);editMenu.add(pasteMenuItem);editMenu.add(cutMenuItem);viewMenu.add(gbkMenuItem);viewMenu.add(utf8MenuItem);menuBar.add(fileMenu);// 给菜单栏添加菜单menuBar.add(editMenu);menuBar.add(viewMenu);setMenuBar(menuBar);// 把菜单栏添加到窗体中// 如果需要构建子级菜单, 那么可以在Menu中放Menu, 然后内部的Menu再放MenuItem}private void generateTextArea() {textArea = new TextArea();// 创建文本域textArea.setFont(new Font("Courier New", Font.PLAIN, 15));// 指定字体add(textArea);// 添加到窗体中textArea.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_O)// 判断快捷键open();if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S)save();}});}private void handleMenuItemEvent() {exitMenuItem.addActionListener(new ActionListener() {// 当菜单项被选择时关闭窗口public void actionPerformed(ActionEvent e) {System.exit(0);}});openMenuItem.addActionListener(new ActionListener() {// 当菜单项被选择时弹出对话框public void actionPerformed(ActionEvent e) {open();}});saveMenuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {save();}});gbkMenuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {charset = "GBK";loadFile(file);}});utf8MenuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {charset = "UTF-8";loadFile(file);}});}private void open() {// 弹出一个对话框FileDialog dialog = new FileDialog(this, "打开", FileDialog.LOAD);dialog.setVisible(true);// 获取选中的文件路径String dir = dialog.getDirectory();String name = dialog.getFile();if (dir != null && name != null) {loadFile(new File(dir, name));// 读取文件内容, 转为String, 显示在TextArea中}}private void loadFile(File file) {this.file = file;try (FileInputStream fis = new FileInputStream(file);ByteArrayOutputStream baos = new ByteArrayOutputStream();) {byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1)// 从文件中读取数据, 写到内存baos.write(buffer, 0, len);String content = new String(baos.toByteArray(), charset);// 获取内存中所有数据, 转为StringtextArea.setText(content);// 把文件内容放到TextArea中} catch (Exception e) {e.printStackTrace();}}private void save() {FileDialog dialog = new FileDialog(this, "保存", FileDialog.SAVE);// 如果选择已存在文件, 会有提示dialog.setVisible(true);String dir = dialog.getDirectory();String name = dialog.getFile();if (dir != null && name != null) {saveFile(new File(dir, name));// 把TextArea中的文本写入到指定的File中}}private void saveFile(File file) {String content = textArea.getText();try (FileWriter fw = new FileWriter(file);) {fw.write(content);} catch (IOException e) {e.printStackTrace();} }}