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

📄 minieditor.java

📁 小小记事本,值得一看哦
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
//MiniEditor version 1.0 alpha1
//09/16/2001
//author countryman@263.net

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 MiniEditor extends JFrame
                        implements ActionListener,
                                   CaretListener,
                                   DocumentListener,
                                   KeyListener {

  JFrame fr; //main frame
  JMenuItem menuFileNew, menuFileOpen, menuFileClose,
            menuFileSave, menuFileSaveAs,
            menuFilePrint, menuFilePrintSetup,
            menuFileExit,
            menuEditUndo, menuEditRedo,
            menuEditCut, menuEditCopy, menuEditPaste,
            menuEditDeleteSelection, menuEditDeleteLine, menuEditDeleteWord,
            menuEditFind, menuEditReplace, menuEditGoTo, menuEditSelectAll,
            menuViewFont, menuViewColor,
            menuViewDoubleSpace,
            menuHelpAbout;
  JCheckBoxMenuItem menuViewClassic, menuViewStatus, menuViewWordWrap;
  PrintableTextArea ta;
  Label statusFile, statusRow, statusCol, statusMode, statusSize;
  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.motif.MotifLookAndFeel");
      //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch(Exception e) {
    }
    //disable chinese input method for jre1.3.
    Locale.setDefault(Locale.ENGLISH);
    //Locale.setDefault(Locale.CHINA);
    MiniEditor me = new MiniEditor();
    //***************** 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("MiniEditor - [New file]");
    fr.getContentPane().setLayout(new BorderLayout(5, 5));
    JPanel p = new JPanel();
    statusFile = new Label("File status:                                  ");
    statusRow = new Label("Row:        ");
    statusCol = new Label("Col:        ");
    statusMode = new Label("Mode:                 ");
    statusSize = new Label("Char:               ");
    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.setWrapStyleWord(true);
    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, 0));
    p.add(statusFile);
    p.add(statusRow);
    p.add(statusCol);
    p.add(statusMode);
    p.add(statusSize);

    JMenuBar mb = new JMenuBar();

    JMenu menuFile = new JMenu("File", true);
    //todo.. maybe conflict with KeyListener
    //menuFile.setMnemonic('F');

    menuFileNew = new JMenuItem("New", 'N');
    menuFileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
    menuFileNew.addActionListener(this);

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

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

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


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


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

    //todo...
    //menuFilePrintSetup = new JMenuItem("Print Setup...", 'u');
    //menuFilePrintSetup.addActionListener(this);
    //menuFilePrintSetup.setEnabled(false);

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

    JMenu menuEdit = new JMenu("Edit", true);

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

    //todo...
    //menuEditRedo = new JMenuItem("Redo");
    //menuEditRedo.addActionListener(this);
    //menuEditRedo.setEnabled(false);

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

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

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

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

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

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

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

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

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

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

    menuEditSelectAll = new JMenuItem("Select All", 'A');
    menuEditSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
    menuEditSelectAll.addActionListener(this);

    JMenu menuView = new JMenu("View", true);

    menuViewFont = new JMenuItem("Font...", 'F');
    menuViewFont.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewFont.addActionListener(this);

    menuViewColor = new JMenuItem("Color...", 'C');
    menuViewColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewColor.addActionListener(this);

    menuViewClassic = new JCheckBoxMenuItem("Classic");
    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("Status");
    menuViewStatus.setMnemonic('S');
    menuViewStatus.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewStatus.setState(true);
    menuViewStatus.addActionListener(this);

    menuViewWordWrap = new JCheckBoxMenuItem("Word  Wrap");
    menuViewWordWrap.setMnemonic('W');
    menuViewWordWrap.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewWordWrap.setState(false);
    menuViewWordWrap.addActionListener(this);

    menuViewDoubleSpace = new JMenuItem("Double  Space", 'D');
    menuViewDoubleSpace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
    menuViewDoubleSpace.addActionListener(this);

    JMenu menuHelp = new JMenu("Help", true);

    menuHelpAbout = new JMenuItem("About", '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.add(menuEditRedo);
    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);
    mb.add(menuView);
    menuView.add(menuViewFont);
    menuView.add(menuViewColor);
    menuView.addSeparator();
    menuView.add(menuViewClassic);
    menuView.add(menuViewStatus);
    menuView.add(menuViewWordWrap);
    menuView.addSeparator();
    menuView.add(menuViewDoubleSpace);
    mb.add(menuHelp);
    menuHelp.add(menuHelpAbout);
    //todo... fix bug
    fr.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        if(statusFile.getText().endsWith("*")) {
          int option = JOptionPane.showConfirmDialog(null,
                         "Save changes ?\n(MUST choose Yes or No)", "File has been changed!", 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);
        }
      //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, "Save changes ?");
        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, "Save changes ?");
        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, "Save changes ?");
        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 {

⌨️ 快捷键说明

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