java 记事本---《功能虽然不是很齐…

package Notepad;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.filechooser.FileFilter;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import javax.swing.undo.UndoManager;
import javax.swing.text.*;
import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;
 public class NoteBook{
    publicstatic void main(String []args){
     new Notepad();
     }
 }
 class Notepad extends JFrame implementsActionListener{
  private JOptionPane jo;
  private File currentFile =null;
  private JTextArea jta;
  private JScrollPane js;
  private JMenuBar menubar;
  private JMenumenu  ;
  private JMenu menuB ;
  private JMenuItem New;
  private JMenuItem open ;
  private JMenuItem save ;
  private JMenuItem exit ;
  private JMenuItem saveas;
  private JToolBar toolbar;//工具栏
  private JMenuItem cut ;
  private JMenuItem copy ;
  private JMenuItem paste ;
  private JMenuItem all ;
  private JMenuItem back ;
  private JToggleButtonbtnopen;
  private JToggleButtonbtnnew;
  private JToggleButtonbtnpaste;
  private JToggleButtonbtncopy;
  private JToggleButtonbtncut;
  private JToggleButtonbtnsave;
  private JToggleButtonbtnsaveas;
  private UndoManager undomang;//定义一个撤销控件
  private boolean change;
  private boolean openflag;
  private boolean newflag;
  private boolean exitflag;
   private booleanwindowflag;
  private int num;
  private Document doc;
  Container cp;
   public voidinit(){
       undomang=new  UndoManager();
    menubar = new JMenuBar();//创建菜单栏
    toolbar = new JToolBar();
    menuB  = new JMenu("编辑");
    menu  = new JMenu("文件");//创建菜单
    New = new JMenuItem("新建",new ImageIcon("new.gif"));//创建子菜单
    open = new JMenuItem("打开",new ImageIcon("open.gif"));
    save= new JMenuItem("保存",new ImageIcon("save.gif"));
    exit = new JMenuItem("退出");
    saveas = new JMenuItem("另存为",new ImageIcon("save.gif"));
    cut = new JMenuItem("剪切",new ImageIcon("cut.gif"));
    copy = new JMenuItem("复制",new ImageIcon("copy.gif"));
    paste = new JMenuItem("粘贴",new ImageIcon("paste.gif"));
    back = new JMenuItem("撤销");
    all = new JMenuItem("全选");
    btnopen = new JToggleButton(new ImageIcon("open.gif"));
    btnnew = new JToggleButton(new ImageIcon("new.gif"));
    btncopy = new JToggleButton(new ImageIcon("copy.gif"));
    btnpaste = new JToggleButton(new ImageIcon("paste.gif"));
    btnsave = new JToggleButton(new ImageIcon("save.gif"));
    btncut = new JToggleButton(new ImageIcon("cut.gif"));
    btnsaveas = new JToggleButton(new ImageIcon("save.gif"));
    jta = new JTextArea(30,50);
    js = new JScrollPane(jta);//为JTextArea添加滚动条
    doc = jta.getDocument();//获得文本中的内容
    doc.addUndoableEditListener(undomang);//添加事件监听
    menu.add(New);//向文件添加子菜单
    menu.add(open);
    menu.add(save);
    menu.add(saveas);
    menu.insertSeparator(3);//插入横线
    menu.add(exit);
    menuB.add(cut);
    menuB.add(copy);
    menuB.add(paste);
    menuB.insertSeparator(3);
    menuB.add(all);
    menuB.add(back);
    menubar.add(menu);
    menubar.add(menuB);
    toolbar.add(btnnew);
    toolbar.add(btnopen);
    toolbar.add(btnsave);
    toolbar.add(btncut);
    toolbar.add(btncopy);
    toolbar.add(btnpaste);
    toolbar.add(btnsaveas);
    New.setActionCommand("新建");
    open.setActionCommand("打开");
    save.setActionCommand("保存");
    exit.setActionCommand("退出");
    saveas.setActionCommand("另存为");
     cut.setActionCommand("剪切");
    copy.setActionCommand("复制");
    paste.setActionCommand("粘贴");
    all.setActionCommand("全选");
    back.setActionCommand("撤销");
    New.addActionListener(this);
    open.addActionListener(this);
    save.addActionListener(this);
    exit.addActionListener(this);
    saveas.addActionListener(this);
    cut.addActionListener(this);
    copy.addActionListener(this);
    paste.addActionListener(this);
    all.addActionListener(this);
    back.addActionListener(this);
    btnopen.addActionListener(this);
    btnsave.addActionListener(this);
    btncut.addActionListener(this);
    btncopy.addActionListener(this);
    btnpaste.addActionListener(this);
    btnnew.addActionListener(this);
    btnsaveas.addActionListener(this);
    menu.setMnemonic(KeyEvent.VK_E);//给文件菜单设置快捷键(要按住Alt键与赋给的值如E)
    menuB.setMnemonic(KeyEvent.VK_F);
    btnopen.setToolTipText("打开");//当鼠标移到按钮,显示提示
    btnsave.setToolTipText("保存");
    btncut.setToolTipText("剪切");
    btncopy.setToolTipText("复制");
    btnpaste.setToolTipText("粘贴");
    btnsaveas.setToolTipText("另存为");
    btnnew.setToolTipText("新建");

     //给文件子菜单添加快捷键(其中CTRL_MASK可以用ALT_MASK)* 当是用CTRL——MASK
    //要按住ctrl键和赋给值 而用ALT_MASK时就要按住Alt键与赋给的值如E
    New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
    open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK));
    save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
    exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
    saveas.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
    cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
    copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
    paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
    all.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
    back.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
    //判断文本是否已经发生改变
    jta.getDocument().addDocumentListener(newDocumentListener(){
       @Override//只是重写的标记,没有其他作用
       public void changedUpdate(DocumentEvent e) {
        change = true;
       }
       @Override
       public void insertUpdate(DocumentEvent e) {
        change = true;
       }
       @Override
       public void removeUpdate(DocumentEvent e) {
        change = true;
       }
      });
     //安全退出程序即关闭窗口
    this.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent we){
      if(change){
        windowflag = true;
        editText();
     }
     else
      System.exit(0);
      }
     });
    toolbar.addSeparator(new Dimension(1500,30));//给状态栏后面添加分隔符
    cp = getContentPane();
    cp.setLayout(new BorderLayout());
    this.setJMenuBar(menubar);//向JFrame添加JMenuBar
    cp.add(toolbar,BorderLayout.NORTH);
    cp.add(js,BorderLayout.CENTER);
     }
   publicNotepad(){
    super("【Waiyiung'sNotepad】");
    init();
    this.setSize(500,600);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    publicvoid actionPerformed(ActionEvent e){
     if(e.getActionCommand()=="新建"||e.getSource()==btnnew){
       if(change){
        newflag =true;
        editText();
        newflag =false;
        }
       else{
       this.dispose();//关闭窗体,释放资源
        newNotepad();
       
      }
     if(e.getActionCommand()=="打开"||e.getSource()==btnopen){
       if(change){
        openflag =true;
        editText();
        openflag =false;
       }
       else
         openFile();
         
     if(e.getActionCommand()=="退出"){
       if(change){
        exitflag =true;
        editText();
        exitflag =false;
       }
        else
       this.dispose();//释放当前的资源
       }
     if(e.getActionCommand()=="保存"||e.getSource()==btnsave){
       saveFile();
       }
     if(e.getActionCommand()=="另存为"||e.getSource()==btnsaveas){
      saveAsFile();
       }
     if(e.getActionCommand()=="复制"||e.getSource()==btncopy){
      jta.copy();
       }
      if(e.getActionCommand()=="粘贴"||e.getSource()==btnpaste){
      jta.paste();
       }
     if(e.getActionCommand()=="撤销"){
       if(undomang.canUndo()){//判断文本是不是可以编辑
          undomang.undo();//撤销编辑
         }
       }
     if(e.getActionCommand()=="剪切"||e.getSource()==btncut){
       jta.cut();
       }
       if(e.getActionCommand()=="全选"){
        jta. selectAll();
           
    }

     //当文本发生改变,而又执行其它命令时弹出对话框提示
     public void editText(){
      String name = "";
      if(currentFile!=null){
       name =currentFile.getName();
       }
     num=JOptionPane.showConfirmDialog(cp,"文件"+ name +" 的文字已经改变,想要保存文件吗?", "Notepad",
                 JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE);       
               if(num==0)
        saveAsFile();
       elseif(num==1&&newflag){
        this.dispose();
        new Notepad();
        }
             elseif(num==1&&exitflag){
              this.dispose();
              }
            elseif(num==1&&openflag)
             openFile();
            elseif(num==1&&windowflag)
             System.exit(0); 
      }
    public void  openFile(){ //打开文件
          JFileChooser open= new JFileChooser();//是打开文件一种的窗体
          open.addChoosableFileFilter(newJavaFileFilter());//向可选择的文件过滤器列表添加一个过滤器
          open.addChoosableFileFilter(new TxtFileFilter());
          open.addChoosableFileFilter(new DocFileFilter());
          // 设置默认的文件管理器。如果不设置,则最后添加的文件过滤器为默认过滤器.这里设置为txtFilter
          int state = open.showOpenDialog(this);// 弹出文件选择窗口,点击确定返回一个整数
          File file = open.getSelectedFile();//获得文件
          
          if (file != null && state ==JFileChooser.APPROVE_OPTION){
              currentFile=file;             
              try {
                  FileReader readFile=newFileReader(file.getAbsolutePath());//文件的读取
                  int len=(int)file.length();
                  char []buffer=new char[len];
                  readFile.read(buffer,0,len);
                  jta.append(new String(buffer));
                  readFile.close();//关闭读入流
              } catch (Exception e) {
                }
               change=false;       //打开一个文件之后把文档内容变化标记变量设为false
                
      }
       public voidsaveFile(){           //保存
          if (currentFile != null){
               try{
                   FileWriter file = new FileWriter(currentFile);
                   file.write(jta.getText());
                   file.close();
               }catch(Exception e){ }
               change=false;
           }
           else   saveAsFile();
       }
        public void saveAsFile(){         //另存为
          JFileChooser save=new  JFileChooser();
           save.addChoosableFileFilter(new JavaFileFilter());
           save.addChoosableFileFilter(new TxtFileFilter());
           save.setDialogTitle("另存为");
           int state = save.showSaveDialog(this);
           Filefile=save.getSelectedFile();             
           if (file != null && state ==JFileChooser.APPROVE_OPTION){    
                //正则表达式用来查看输入的文件名是否有后缀名
            Pattern pattern=Pattern.compile("\\.\\w*",Pattern.CASE_INSENSITIVE);     
            Matcher matcher = pattern.matcher(file.getAbsolutePath());
            if(!matcher.find()){            
             file=new File(file.getAbsolutePath().concat(".txt"));
                
               currentFile=file;                   
               try {
                   FileWriter target = newFileWriter(currentFile.getAbsolutePath());
                   target.write(jta.getText());
                   target.close();
               } catch (Exception e) { }
               change=false;
               
    }
  }
 class JavaFileFilter extends FileFilter {
      public String getDescription() {
        return "java源文件(*.java)";
    }//对过滤器的描述
    public boolean accept(File file) {
        return file.getName().toLowerCase().endsWith(".java");
    }//描述过滤器是否接受给定的文件(接受java文件)
 }
   class TxtFileFilter extendsFileFilter {
      public String getDescription() {
        return "文本文档(*.txt)";
    }//对过滤器的描述
    public boolean accept(File file) {
        return file.getName().toLowerCase().endsWith(".txt");
    }//描述过滤器是否接受给定的文件(过滤器接受txt文件)
 }
  class DocFileFilter extends FileFilter {
      public String getDescription() {
        return "Word 文档(*.doc)";
    }//对过滤器的描述
    public boolean accept(File file) {
        return file.getName().toLowerCase().endsWith(".doc");
    }//描述过滤器是否接受给定的文件(过滤器接受doc文件)
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值