当前位置: 首页 > 编程笔记 >

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

葛骏
2023-03-14
本文向大家介绍使用Java制作一个简单的记事本,包括了使用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();   

        }  

    }  

}

效果图:

 

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

 类似资料:
  • 本文向大家介绍Java Web使用简单的批处理操作(记事本+Tomcat),包括了Java Web使用简单的批处理操作(记事本+Tomcat)的使用技巧和注意事项,需要的朋友参考一下  之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到。所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不太好用。今天闲来

  • 我已经尝试自己学习Java大约一个星期了,我决定尝试应用我(相当有限)的知识来制作一个简单的猜谜游戏。

  • 本文向大家介绍Java中反射的一个简单使用,包括了Java中反射的一个简单使用的使用技巧和注意事项,需要的朋友参考一下 简介 首先介绍一些不太实用的解释:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 简单使用 反射,在java中是非常常见和好用

  • 本文向大家介绍用jquery的方法制作一个简单的导航栏,包括了用jquery的方法制作一个简单的导航栏的使用技巧和注意事项,需要的朋友参考一下

  • 问题内容: 如果我有一个Java项目,其中包含几种不同类型的文件(图片,声音等)和多个jar依赖项,那么将它们打包到一个可以双击的jar中的好方法是什么? 我知道jar本身很笨,因为它们不会在内部查找它们所依赖的文件(这是我在稍有沮丧(轻描淡写)后才意识到的)。-如果jar A取决于jar B中包含的类,则将jar B放入jar A中将不起作用。Jar A必须与jar B在同一目录中。 …现在,我

  • 本文向大家介绍Java实现的简易记事本,包括了Java实现的简易记事本的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的简易记事本。分享给大家供大家参考。具体如下: 感觉这个没有自己以前用Windows API写的好看了。。。 JDK Version : 1.7.0 效果如下图所示: 源代码如下: 希望本文所述对大家的java程序设计有所帮助。