java实现简单的记事本

包含打开文件,保存文件,复制,粘贴,剪切功能,都是在菜单栏目上实现的功能

源代码:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileFilter;
import static java.awt.event.InputEvent.*;
import java.awt.datatransfer.*;
import java.util.Enumeration;
import java.util.Hashtable;
/*import javax.swing.*;
import javax.swing.filechooser.FileFilter;

import java.awt.event.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;*/

class jishiben 
{
  public static void main(String args[])
  {
     TextEdit TE=new TextEdit("记事本");
  }
}
class TextEdit extends Frame implements ActionListener
{
   MenuBar m;
   Menu m1,m2;
   MenuItem xinjian,dakai,baocun,tuichu,jianqie,fuzhi,zhantie;
   TextArea text;
   String filename;
   FileDialog openFD,saveFD;
   BufferedReader in;
   FileReader read;
   BufferedWriter out;
   FileWriter writer;
   Clipboard cb;
   TextEdit(String s)
   {
     super(s);
     m=new MenuBar();
     m1=new Menu("文件");
     xinjian=new MenuItem("新建");
     dakai=new MenuItem("打开");
     baocun=new MenuItem("保存");
     tuichu=new MenuItem("退出");
     m2=new Menu("编辑");
     jianqie=new MenuItem("剪切");
     fuzhi=new MenuItem("复制");
     zhantie=new MenuItem("粘贴");
     text=new TextArea();
     openFD=new FileDialog(this,"打开",FileDialog.LOAD);
     saveFD=new FileDialog(this,"保存",FileDialog.SAVE);
     filename="NoName";
     
     m1.add(xinjian);
     m1.addSeparator();
     m1.add(dakai);
     m1.addSeparator();
     m1.add(baocun);
     m1.addSeparator();
     m1.add(tuichu);
     m2.add(jianqie);
     m2.addSeparator();
     m2.add(fuzhi);
     m2.addSeparator();
     m2.add(zhantie);
     m.add(m1);
     m.add(m2);
     
     //关键部分,没有为cb申请内存,下面对cb操作会出错
    cb = new Clipboard("nothing");
     //
     
     setMenuBar(m);
     setSize(300,400);setVisible(true);
     add(text,"Center");
     
     xinjian.addActionListener(this);
     dakai.addActionListener(this);
     baocun.addActionListener(this);
     tuichu.addActionListener(this);
     jianqie.addActionListener(this);
     fuzhi.addActionListener(this);
     zhantie.addActionListener(this);
     addWindowListener(new WindowAdapter()
                      {
                        public void windowClosing(WindowEvent e)
                        {
                          System.exit(0);
                        }
                      });
    }
    
    public void actionPerformed(ActionEvent e)
    {
      if(e.getSource()==xinjian)
       {
         text.setText("");
       }
      if(e.getSource()==dakai)
       {
        openFD.show();
        String s;
        filename=openFD.getDirectory()+openFD.getFile();
        if(filename!=null)
         {
          try
           {
            File file=new File(filename);
            read=new FileReader(file);
            in=new BufferedReader(read);
            while((s=in.readLine())!=null)
                text.append(s+'\n');
            in.close();
            read.close();
           }
            catch(IOException e2){}
         }
       }
      
      if(e.getSource()==baocun)
      {
        saveFD.show();
        filename=saveFD.getDirectory()+saveFD.getFile();
        if(filename!=null)
        {
         try
           {
            File file=new File(filename);
            writer=new FileWriter(file);
            out=new BufferedWriter(writer);
            out.write(text.getText(),0,(text.getText()).length());
            
            out.close();
            writer.close();
           }
          catch(IOException e2){} 
        }
      }
      if(e.getSource()==tuichu)
      {
        System.exit(0);
      }
      
      
      
      
     if(e.getSource()==jianqie)
      {
      //类text中没有cut方法,不能使用text.cut
        String s=text.getSelectedText();
        StringSelection select=new StringSelection(s);
        cb.setContents(select,null);
        text.replaceRange("",text.getSelectionStart(),text.getSelectionEnd());
      }
      if(e.getSource()==fuzhi)
      {
      //同上,没有copy这个方法
        String s=text.getSelectedText();
        StringSelection select=new StringSelection(s);
        cb.setContents(select,null);
      }
      if(e.getSource()==zhantie)
      {
      //同上,没有paste方法
           String s="";
          Transferable t = cb.getContents(null);
          try 
          {
                if (t != null
                    && t.isDataFlavorSupported(DataFlavor.stringFlavor)) 
                {
                        // 因为原系的剪贴板里有多种信息, 如文字, 图片, 文件等
                        // 先判断开始取得的可传输的数据是不是文字, 如果是, 取得这些文字
                        
                    s = (String)t.getTransferData(DataFlavor.stringFlavor);
                        // 同样, 因为Transferable中的DataFlavor是多种类型的,
                        // 所以传入DataFlavor这个参数, 指定要取得哪种类型的Data.
                        //System.out.println(s);
                }
          } 
          catch (UnsupportedFlavorException ex) 
          {
                ex.printStackTrace();
          } 
          catch (IOException ex) 
          {
                ex.printStackTrace();
          }
          
          text.insert(s,text.getCaretPosition());
          
      }
      
    }
  
   
}

作者:涵曦www.hanxi.cc
出处:hanxi.cnblogs.com
GitHub:github.com/hanxi
Email:im.hanxi@gmail.com
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

《 Skynet 游戏服务器开发实战》

原文地址:https://www.cnblogs.com/hanxi/p/2469002.html