使用Java制作一个简单的记事本

通过使用Java的Swing、IO来实现一个简单记事本,实现打开指定的text文本文件,然后将text文件的内容加载到Swing组件中,然后在Swing组件中编辑记事本内容,然后同菜单的保存选项将编辑后的内容保存到text文件中。代码如下:


import java.io.*;

import java.nio.*;

import java.nio.channels.*;

import java.nio.charset.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.JOptionPane;

/**

*功能:简单记事本

*2011-12-25

*/

public class SimpleNotepad implements ActionListener{

    private Frame frame;

    private FileDialog fd_load;

    private FileDialog fd_save;

    private TextArea ta;

    private String file = "";

    private MenuItem save;

    private RandomAccessFile raf;

    private FileChannel fci;

    private FileLock flock;

    private CharsetEncoder encoder;

    private CharsetDecoder decoder;

    public static void main( String args[]) {

        new SimpleNotepad().init();

    }

    public void init(){

        frame = new Frame("My Notepad");

        MenuBar mb = new MenuBar();

        Menu file = new Menu("文件");

        Menu help = new Menu("帮助");

        MenuItem open = new MenuItem("打开");

        save = new MenuItem("保存");

        save.setEnabled(false);

        file.add(open);

        file.add(save);

        mb.add(file);

        mb.add(help);      

        frame.setMenuBar(mb);

        ta = new TextArea();

        frame.add(ta,"Center");    

        open.addActionListener(this);

        save.addActionListener(this);

        frame.addWindowListener(new WindowAdapter(){

            public void windowClosing(WindowEvent e){

                System.exit(0);

            }  

        });  

        frame.setSize(600,400);

        frame.setLocation(300,100);

        frame.setVisible( true);      

        fd_load = new FileDialog(frame,"打开文件",FileDialog.LOAD);

        fd_save = new FileDialog(frame,"保存文件",FileDialog.SAVE);

        Charset charset = Charset.forName(System.getProperty("file.encoding"));

        encoder = charset.newEncoder();

        decoder = charset.newDecoder();

    }

    public void actionPerformed(ActionEvent e){

        String s = e.getActionCommand();

        if(s.equals("打开")){

            fd_load.setVisible(true);

            String d = fd_load.getDirectory();

            String f = fd_load.getFile();

            if((d != null) && (f != null)){

                String destfile = d + f;

                if(destfile.equals(file)){

                    return;

                }else{

                    this.closeFile();

                    file = destfile;

                    this.loadFile();

                }  

            }

        }else if(s.equals("保存")){

            this.saveFile();

        }

    }  

    public void loadFile(){

        try{

            raf = new RandomAccessFile(file,"rw");

            fci = raf.getChannel();

            flock = fci.tryLock();

            if(flock == null){

                ta.setText("");

                JOptionPane.showMessageDialog(null, 

                    "文件正在使用中,无法以独占的方式打开!",

                    "错误提示", JOptionPane.ERROR_MESSAGE);   

                file = "";

                raf.close();

                raf = null;

            }else{

                int length = (int)fci.size();

                ByteBuffer bb = ByteBuffer.allocate(length);

                fci.read(bb);

                bb.flip();

                CharBuffer cb = decoder.decode(bb);

                ta.setText(cb.toString());

                frame.setTitle("My Notepad - " + file);

                save.setEnabled(true);

            }

        }catch(IOException e){

            e.printStackTrace();   

        }

    }

    public void saveFile(){

        String content = ta.getText();

        try{

            CharBuffer cb = CharBuffer.wrap(content.toCharArray());

            ByteBuffer bb = encoder.encode(cb);

            raf.setLength(0);

            fci.write(bb);

            fci.force(true);

        }catch(IOException e){

            e.printStackTrace();   

        }

    }

    public void closeFile(){

        try{

            if(flock != null){

                flock.release();

            }

            if(raf != null){

                raf.close();   

            }

            file = "";

            frame.setTitle("My Notepad");

            save.setEnabled(false);

        }catch(IOException e){

            e.printStackTrace();   

        }  

    }  

}

效果图:

 

以上就是本文的全部内容了,希望大家能够喜欢。