| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2332 人关注过本帖, 1 人收藏
标题:自制简单的记事本
只看楼主 加入收藏
程序猿单身狗
Rank: 1
等 级:新手上路
帖 子:36
专家分:4
注 册:2016-7-11
结帖率:100%
收藏(1)
 问题点数:0 回复次数:3 
自制简单的记事本
程序代码:
package com.tocean.ch15.exec;

import java.awt.BorderLayout;

public class NotePad extends JFrame implements ActionListener {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    NotePad frame = new NotePad();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * 通过拖拉方式弄成的界面
     */
    public NotePad() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 684, 444);

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu menu = new JMenu("\u6587\u4EF6");
        menuBar.add(menu);

        newMenuItem = new JMenuItem("\u65B0\u5EFA");
        newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
                InputEvent.CTRL_MASK));
        menu.add(newMenuItem);

        openMenuItem = new JMenuItem("\u6253\u5F00");
        openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
                InputEvent.CTRL_MASK));
        menu.add(openMenuItem);

        saveMenuItem = new JMenuItem("\u4FDD\u5B58");
        saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
                InputEvent.CTRL_MASK));
        menu.add(saveMenuItem);

        saveasMenuItem = new JMenuItem("\u53E6\u5B58\u4E3A");
        menu.add(saveasMenuItem);

        exitMenuItem = new JMenuItem("\u9000\u51FA");
        menu.add(exitMenuItem);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        textPane = new JTextPane();
        contentPane.add(textPane, BorderLayout.CENTER);
        addListeners();
        

    }

    /**
     * 注册事件
     */
    private void addListeners() {
        exitMenuItem.addActionListener(this);
        saveasMenuItem.addActionListener(this);
        saveMenuItem.addActionListener(this);
        newMenuItem.addActionListener(this);
        openMenuItem.addActionListener(this);
        textPane.addKeyListener(new KeyAdapter(){

            @Override
            public void keyTyped(KeyEvent e) {
                isSaved=false;
                super.keyTyped(e);
            }
            
        });
    }
    /**
     * 打开
     */
    private void open(){
        if ( !isSaved) {// 表示该文件是一个新建的文件
            int ok = JOptionPane.showConfirmDialog(this, "是否保存正在编辑的文件?");
            if (JOptionPane.YES_OPTION == ok) {
                if (saveFile == null) {
                    saveAs();
                } else {
                    save();
                }
            }
        }
        JFileChooser jfc = new JFileChooser();
         int option=jfc.showOpenDialog(this);
         if(JFileChooser.APPROVE_OPTION==option){
             saveFile =jfc.getSelectedFile();
             isSaved=true;
             this.setTitle(saveFile.getAbsolutePath());
             //用流读取文件内容,然后显示到JTextPanes上
             BufferedReader in = null;
             try {
                 in = new BufferedReader(new FileReader(saveFile));
                 String line=null;
                 StringBuffer sb=new StringBuffer();
                 while((line=in.readLine())!=null){
                     sb.append(line).append("\n");
                 }
                 textPane.setText(sb.toString());

             } catch (IOException e) {
                 e.printStackTrace();

             } finally {
                 if (null != in)
                     try {
                         in.close();
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
             }
             
         }
        
    }
    
    

    /**
     * 新建文件
     * 保存正在编辑的文件
     */
    private void newFile() {
        if ( !isSaved) {// 表示该文件是一个新建的文件
            int ok = JOptionPane.showConfirmDialog(this, "是否保存正在编辑的文件?");
            if (JOptionPane.YES_OPTION == ok) {
                if (saveFile == null) {
                    saveAs();
                } else {
                    save();
                }
            }
        }
        textPane.setText("");
        saveFile = null;
        isSaved=false;
        this.setTitle("新建文件");
    }

    /**
     * 保存
     */
    private void save() {
        if (null == saveFile) {// 表示该文件是一个新建的文件
            saveAs();
        } else {// 如果不为空,表明已经当前正在编辑的文件就是saveFile
            String content = textPane.getText();
            saveFile(saveFile, content);
            isSaved = true;
        }
    }

    /**
     * 另存为
     */
    private void saveAs() {
        JFileChooser jfc = new JFileChooser();
        int option = jfc.showSaveDialog(this);
        
        if (JFileChooser.APPROVE_OPTION == option) {
            File file = jfc.getSelectedFile();
            String content = textPane.getText();

            if (file.exists()) {// 如果原有文件已经存在,则提示覆盖
                int ok = JOptionPane.showConfirmDialog(this, "该文件已经存在,是否覆盖文件?");
                if (JOptionPane.YES_OPTION == ok) {
                    saveFile(file, content);
                    isSaved = true;
                    saveFile = file;
                    this.setTitle(file.getAbsolutePath());
                }

            } else {// 如果文件不存在,则直接保存
                saveFile(file, content);
                isSaved = true;
                saveFile = file;
                this.setTitle(file.getAbsolutePath());
            }

        }
    }

    /**
     * 保存文件
     */
    private void saveFile(File file, String content) {
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new FileWriter(file));
            out.write(content);
            out.flush();

        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            if (null != out)
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

    }

    /**
     * 退出
     */
    private void exit() {
        if (!isSaved) {
            int ok = JOptionPane.showConfirmDialog(this, "是否保存文件");
            if (JOptionPane.YES_OPTION == ok) {
                saveAs();
                System.exit(0);

            } else if (JOptionPane.NO_OPTION == ok) {
                System.exit(0);

            }
        }
        System.exit(0);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == exitMenuItem) {
            exit();
        } else if (e.getSource() == saveasMenuItem) {
            saveAs();

        } else if (e.getSource() == saveMenuItem) {
            save();
        } else if (e.getSource() == newMenuItem) {
            newFile();
        }else if (e.getSource() == openMenuItem) {
            open();
        }
    }

    private JTextPane textPane;
    private File saveFile;
    private boolean isSaved = false;
    private JMenuItem exitMenuItem;
    private JMenuItem saveasMenuItem;
    private JMenuItem saveMenuItem;
    private JMenuItem newMenuItem;
    private JMenuItem openMenuItem;

}
搜索更多相关主题的帖子: 记事本 color 
2016-08-19 10:05
kaosaier
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:124
专家分:303
注 册:2016-7-23
收藏
得分:0 
好复杂呀!

minecraft,我的最爱!
2016-09-16 19:54
kaosaier
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:124
专家分:303
注 册:2016-7-23
收藏
得分:0 
回复 楼主 程序猿单身狗
67个错误。

minecraft,我的最爱!
2016-09-16 22:11
zgy150010318
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-4-5
收藏
得分:0 
谢谢楼主
2016-10-13 23:23
快速回复:自制简单的记事本
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029826 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved