ITPub博客

首页 > 应用开发 > Java > 使用Java的Swing、IO来实现一个简单记事本

使用Java的Swing、IO来实现一个简单记事本

Java 作者:ubuntulinuxjava 时间:2015-03-10 14:14:40 0 删除 编辑
文章来源:使用Java的Swing、IO来实现一个简单记事本()

通过使用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实现简易记事本效果图


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26875129/viewspace-1454723/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Java中的反射机制
下一篇: DOCTYPE元素语法
请登录后发表评论 登录
全部评论

注册时间:2015-01-20

  • 博文量
    12
  • 访问量
    19439