⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myeditor.java

📁 用java编制的记事本
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
//记事本
//12/2/2003
//author WuFeng Donghua University

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.undo.*;

public class MyEditor extends JFrame
                        implements ActionListener,
                                   CaretListener,
                                   DocumentListener,
                                   KeyListener {

  JFrame fr; //main frame
  JMenuItem menuFileNew, menuFileOpen, menuFileClose,
            menuFileSave, menuFileSaveAs,
            menuFilePrint, menuFilePrintSetup,
            menuFileExit,
            menuEditUndo, 
            menuEditCut, menuEditCopy, menuEditPaste,
            menuEditDeleteSelection, menuEditDeleteLine, menuEditDeleteWord,
            menuEditFind, menuEditReplace, menuEditGoTo, menuEditSelectAll,menuTime,
            menuViewFont, menuViewColor,
            menuHelpAbout;
  JCheckBoxMenuItem menuViewClassic,menuAuto,menuViewStatus;
  PrintableTextArea ta;
  Label  statusFile, statusRow, statusCol; 
  String fns; //file name
  Color defaultForeground, defaultBackground, defaultCaretColor;
  Font defaultFont = new Font("Courier", Font.PLAIN,12);
  UndoManager undo = new UndoManager();
  UndoableEditListener undoHandler = new UndoHandler();

  static int foundCount = 0;
  int FindStartPos = 0;
  boolean findingLoop = true;
  boolean beginTextListener = true, isNewFile;
  boolean INSERTMODE = true;
  boolean BACKSPACE = false;
 
  public static void main(String[] args){
    try {
       
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch(Exception e) {
    }
    
    Locale.setDefault(Locale.ENGLISH);
     
    MyEditor me = new MyEditor();
    //***************** accept parameter here *************//
    if(args.length > 0)
      me.windowLayout(args[0]);
    else
      me.windowLayout(null);
  }

  //public void windowLayout() {
  public void windowLayout(String tempFns) {
    fr = new JFrame("记事本");
    fr.getContentPane().setLayout(new BorderLayout(5, 5));
    JPanel p = new JPanel();
    statusRow = new Label("行数:        ");
    statusCol = new Label("列数:        ");
    ta = new PrintableTextArea(20, 50);
    ta.setCursor(new Cursor(Cursor.HAND_CURSOR));
    ta.setFont(defaultFont);
    defaultForeground = ta.getForeground();
    defaultBackground = ta.getBackground();
    defaultCaretColor = ta.getCaretColor();
    ta.getDocument().addDocumentListener(this);
    ta.addCaretListener(this);
    ta.addKeyListener(this);
    ta.getDocument().addUndoableEditListener(undoHandler);
    JScrollPane scroller = new JScrollPane();
    JViewport port = scroller.getViewport();
    port.add(ta);
    fr.getContentPane().add("Center", scroller);
    fr.getContentPane().add("South", p);
    p.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
    p.add(statusRow);
    p.add(statusCol);

    JMenuBar mb = new JMenuBar();

    JMenu menuFile = new JMenu("",true);
    
    menuFileNew = new JMenuItem("新建", 'N');
    menuFileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
    menuFileNew.addActionListener(this);

    menuFileOpen = new JMenuItem("打开...", 'O');
    menuFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
    menuFileOpen.addActionListener(this);

    menuFileClose = new JMenuItem("关闭", 'C');
    menuFileClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.CTRL_MASK));
    menuFileClose.addActionListener(this);

    menuFileSave = new JMenuItem("保存", 'S');
    menuFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
    menuFileSave.addActionListener(this);


    menuFileSaveAs = new JMenuItem("另存为...", 'A');
    menuFileSaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0));
    menuFileSaveAs.addActionListener(this);


    menuFilePrint = new JMenuItem("打印", 'P');
    menuFilePrint.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK));
    menuFilePrint.addActionListener(this);

    
    menuFilePrintSetup = new JMenuItem("页面设置...", 'u');
    menuFilePrintSetup.addActionListener(this);
    menuFilePrintSetup.setEnabled(false);

    menuFileExit = new JMenuItem("退出", 'x');
    menuFileExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_MASK));
    menuFileExit.addActionListener(this);

    JMenu menuEdit = new JMenu("编辑", true);

    menuEditUndo = new JMenuItem("撤消", 'U');
    menuEditUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
    menuEditUndo.addActionListener(this);
    menuEditUndo.setEnabled(false);

    menuEditCut = new JMenuItem("剪切", 't');
    menuEditCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
    menuEditCut.addActionListener(this);

    menuEditCopy = new JMenuItem("复制", 'C');
    menuEditCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
    menuEditCopy.addActionListener(this);

    menuEditPaste = new JMenuItem("粘贴", 'P');
    menuEditPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
    menuEditPaste.addActionListener(this);

    JMenu menuEditDelete = new JMenu("删除");
    menuEditDelete.setMnemonic('D');

    menuEditDeleteSelection = new JMenuItem("选择", 'S');
    menuEditDeleteSelection.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
    menuEditDeleteSelection.addActionListener(this);

    menuEditDeleteLine = new JMenuItem("行", 'L');
    menuEditDeleteLine.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK));
    menuEditDeleteLine.addActionListener(this);

    menuEditDeleteWord = new JMenuItem("字符", 'W');
    menuEditDeleteWord.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK));
    menuEditDeleteWord.addActionListener(this);

    menuEditFind = new JMenuItem("查找...", 'F');
    menuEditFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
    menuEditFind.addActionListener(this);

    menuEditReplace = new JMenuItem("替换...", 'R');
    menuEditReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK));
    menuEditReplace.addActionListener(this);

    menuEditGoTo = new JMenuItem("转到...", 'G');
    menuEditGoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK));
    menuEditGoTo.addActionListener(this);

    menuEditSelectAll = new JMenuItem("全选", 'A');
    menuEditSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
    menuEditSelectAll.addActionListener(this);
    
    menuTime = new JMenuItem("时间/日期");
    menuTime.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
    menuTime.addActionListener(this);
    
    JMenu menuformat=new JMenu("格式",true);
    
    menuAuto= new JCheckBoxMenuItem("自动换行");
    menuAuto.setMnemonic('w');
    menuAuto.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuAuto.setState(true);
    menuAuto.addActionListener(this);
    
    menuViewFont = new JMenuItem("字体...", 'F');
    menuViewFont.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewFont.addActionListener(this);

    menuViewColor = new JMenuItem("颜色...", 'C');
    menuViewColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewColor.addActionListener(this);
    
    JMenu menuView = new JMenu("查看", true);

    menuViewClassic = new JCheckBoxMenuItem("经典");
    menuViewClassic.setMnemonic('l');
    menuViewClassic.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewClassic.setState(false);
    menuViewClassic.addActionListener(this);

    menuViewStatus = new JCheckBoxMenuItem("状态");
    menuViewStatus.setMnemonic('S');
    menuViewStatus.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewStatus.setState(true);
    menuViewStatus.addActionListener(this);

    JMenu menuHelp = new JMenu("帮助", true);

    menuHelpAbout = new JMenuItem("关于记事本", 'A');
    menuHelpAbout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
    menuHelpAbout.addActionListener(this);

    fr.setJMenuBar(mb);
    mb.add(menuFile);
    menuFile.add(menuFileNew);
    menuFile.add(menuFileOpen);
    menuFile.add(menuFileClose);
    menuFile.addSeparator();
    menuFile.add(menuFileSave);
    menuFile.add(menuFileSaveAs);
    menuFile.addSeparator();
    menuFile.add(menuFilePrint);
    menuFile.add(menuFilePrintSetup);
    menuFile.addSeparator();
    menuFile.add(menuFileExit);
    mb.add(menuEdit);
    menuEdit.add(menuEditUndo);
    menuEdit.addSeparator();
    menuEdit.add(menuEditCut);
    menuEdit.add(menuEditCopy);
    menuEdit.add(menuEditPaste);
    menuEdit.add(menuEditDelete);
    menuEditDelete.add(menuEditDeleteSelection);
    menuEditDelete.add(menuEditDeleteLine);
    menuEditDelete.add(menuEditDeleteWord);
    menuEdit.addSeparator();
    menuEdit.add(menuEditFind);
    menuEdit.add(menuEditReplace);
    menuEdit.add(menuEditGoTo);
    menuEdit.addSeparator();
    menuEdit.add(menuEditSelectAll);
    menuEdit.add(menuTime);
    mb.add(menuformat);
    menuformat.add(menuAuto);
    menuformat.add(menuViewFont);
    menuformat.add(menuViewColor);
    mb.add(menuView);
    menuView.add(menuViewClassic);
    menuView.add(menuViewStatus);
    menuView.addSeparator();
    mb.add(menuHelp);
    menuHelp.add(menuHelpAbout);
    
    fr.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        if(statusFile.getText().endsWith("*")) {
          int option = JOptionPane.showConfirmDialog(null,
                         "想保存文件吗 ?", "文件已经被改变!", JOptionPane.YES_NO_OPTION);
          switch(option) {
            case JOptionPane.NO_OPTION :
              System.exit(0);
              break;
            case JOptionPane.YES_OPTION :
              if(fns == null) {
                if(saveNewFile()) {
                  System.exit(0);
                }
              }
              else {
                if(saveFile()) {
                  System.exit(0);
                }
              }
              break;
            default:
              break;
          }
        }
        else {
          System.exit(0);
        }
       
      }
    });
    fr.setSize(600,420);
    fr.setVisible(true);
   
    if(tempFns != null)
      openFileViaArgs(tempFns);
  }

  //ActionListener
  public void actionPerformed(ActionEvent ae) {
    if(ae.getSource() == menuFileNew) {
      if(statusFile.getText().endsWith("*")) {
        int option = JOptionPane.showConfirmDialog(null, "想保存文件吗 ?");
        if(fns == null) {
          switch(option) {
            case JOptionPane.NO_OPTION :
              setNewFile();
              break;
            case JOptionPane.YES_OPTION :
              if(saveNewFile())
                setNewFile();
              break;
            default:
              break;
          }
        }
        else {
          switch(option) {
            case JOptionPane.NO_OPTION :
              setNewFile();
              break;
            case JOptionPane.YES_OPTION :
              if(saveFile())
                setNewFile();
              break;
            default:
              break;
          }
        }
      }
      else {
        setNewFile();
      }
    }
    else if(ae.getSource() == menuFileOpen) {
      if(statusFile.getText().endsWith("*")) {
        int option = JOptionPane.showConfirmDialog(null, "想保留文件吗 ?");
        if(fns == null) {
          switch(option) {
            case JOptionPane.NO_OPTION :
              openFile();
              break;
            case JOptionPane.YES_OPTION :
              if(saveNewFile()) {
                openFile();
              }
              break;
            default:
              break;
          }
        }
        else {
          switch(option) {
            case JOptionPane.NO_OPTION :
              openFile();
              break;
            case JOptionPane.YES_OPTION :
              if(saveFile()) {
                openFile();
              }
              break;
            default:
              break;
          }
        }
      }
      else {
        openFile();
      }
    }
    else if(ae.getSource() == menuFileClose) {
      if(statusFile.getText().endsWith("*")) {
        int option = JOptionPane.showConfirmDialog(null, "想保留文件吗 ?");
        switch(option) {
          case JOptionPane.NO_OPTION :
            setNewFile();
            break;
          case JOptionPane.YES_OPTION :
            if(fns != null) {
              if(saveFile()) {
                setNewFile();
              }
            }
            else {
              if(saveNewFile()) {
                setNewFile();
              }
            }
            break;
          default:
            break;
        }
      }
      else {
        setNewFile();
      }
    }
    else if(ae.getSource() == menuFilePrint) {
      JOptionPane.showMessageDialog(null, "请连接好打印机!", "打印", JOptionPane.INFORMATION_MESSAGE);
      ta.printIt(ta.getText(), ta.getFont());
      
    }
  
    else if(ae.getSource() == menuFileSave) {
      if(fns != null) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -