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

📄 minieditor.java

📁 Java编写的记事本程序,对学习Java桌面编程的朋友可能会有帮助!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;

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 {
	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;

	TextField tfs, tfro, tfrn;

	Label fileStatus, statusRow, statusCol, statusMode, statusSize;

	Button bs, brf, brr, brra;

	JFrame fr;

	JDialog dl;

	String fns;

	Color defaultForeground, defaultBackground, defaultCaretColor;

	Font defaultFont = new Font("Courier", Font.PLAIN, 12);

	Checkbox dsLoop, dsMatchCase, drMatchCase;

	JLabel dsMessage2;

	protected UndoManager undo = new UndoManager();

	protected UndoableEditListener undoHandler = new UndoHandler();

	static int foundCount = 0;

	int FindStartPos = 0;

	boolean findingLoop = true;

	boolean beginTextListener, 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) {
		}
		// Locale.setDefault(Locale.CHINA);
		// Locale.setDefault(new Locale("zh", "CN"));
		MiniEditor me = new MiniEditor();
		me.windowLayout();
	}

	public void windowLayout() {
		JFrame fr = new JFrame("MiniEditor");
		fr.getContentPane().setLayout(new BorderLayout(5, 5));
		JPanel p = new JPanel();
		fileStatus = new Label("file status: ");
		statusRow = new Label("row: ");
		statusCol = new Label("col: ");
		statusMode = new Label("mode: ");
		statusSize = new Label("size: ");
		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(fileStatus);
		p.add(statusRow);
		p.add(statusCol);
		p.add(statusMode);
		p.add(statusSize);

		JMenuBar mb = new JMenuBar();

		JMenu menuFile = new JMenu("File", true);
		// 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);
		// menuFilePrint.setEnabled(false);

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

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

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

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

		// 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_Y,
				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);
		// menuEditReplace.setEnabled(false);

		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);
		fr.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		fr.setSize(600, 420);
		fr.setVisible(true);
	}

	// ActionListener
	public void actionPerformed(ActionEvent ae) {
		if (ae.getSource() == menuFileNew) {
			ta.replaceRange("", 0, ta.getText().length());
			fns = null;
			fileStatus.setText("New File");
			undo.discardAllEdits();
			menuEditUndo.setEnabled(false);
		} else if (ae.getSource() == menuFileOpen) {
			String s = null;
			StringBuffer strPool = new StringBuffer();
			Frame openFileFrame = new Frame("Open file");
			FileDialog fileDialog = new FileDialog(openFileFrame);
			fileDialog.setMode(FileDialog.LOAD);
			fileDialog.setFile("*.txt;*.java");
			fileDialog.show();
			String file = fileDialog.getFile();
			String directory = fileDialog.getDirectory();
			if (file != null) {
				fns = directory + file;
				ta.replaceRange("", 0, ta.getText().length());
				BufferedReader br;
				try {
					br = new BufferedReader(new FileReader(fns));
					s = br.readLine();
					while (s != null) {
						strPool.append(s + '\15' + "\12");// +0D+0A
						s = br.readLine();
					}
					br.close();
					ta.setText(strPool.toString());
				} catch (IOException e) {
				}
				fileStatus.setText("file opened.");
				isNewFile = true;
				undo.discardAllEdits();
				menuEditUndo.setEnabled(false);
			}
		} else if (ae.getSource() == menuFileClose) {
			ta.replaceRange("", 0, ta.getText().length());
			fileStatus.setText("file closed without save");
			undo.discardAllEdits();
			menuEditUndo.setEnabled(false);
			fns = null;
		} else if (ae.getSource() == menuFilePrint) {
			JOptionPane.showMessageDialog(null,
					"TODO... Only the FIRST page now.", "Print", 1);
			ta.printIt(ta.getText(), ta.getFont());
			// todo...
		}
		// else if(ae.getSource() == menuFilePrintSetup) {
		// ta.printItSetup(ta.getText(), ta.getFont());
		// todo...
		// }
		else if (ae.getSource() == menuFileSave) {
			OutputStreamWriter osw;
			if (fns != null) {
				try {
					osw = new OutputStreamWriter(new BufferedOutputStream(
							new FileOutputStream(fns)));
					osw.write(ta.getText(), 0, ta.getText().length());
					osw.close();
					fileStatus.setText("file saved");
				} catch (IOException e) {
				}
				if (fileStatus.getText().endsWith("*")) {
					fileStatus.setText(fileStatus.getText().substring(0,
							fileStatus.getText().length() - 1));
				}
			} else {
				Frame saveFileFrame = new Frame("Save file");
				FileDialog fileDialog = new FileDialog(saveFileFrame);
				fileDialog.setMode(FileDialog.SAVE);
				fileDialog.setFile("*.txt;*.java");
				fileDialog.show();
				String file = fileDialog.getFile();
				String directory = fileDialog.getDirectory();
				if (file != null) {
					fns = directory + file;
					try {
						osw = new OutputStreamWriter(new BufferedOutputStream(
								new FileOutputStream(fns)));
						osw.write(ta.getText(), 0, ta.getText().length());
						osw.close();
						fileStatus.setText("file saved");
					} catch (IOException e) {
					}
				}
			}
		} else if (ae.getSource() == menuFileSaveAs) {
			OutputStreamWriter osw;
			Frame saveFileFrame = new Frame("Save file");
			FileDialog fileDialog = new FileDialog(saveFileFrame);
			fileDialog.setMode(FileDialog.SAVE);
			fileDialog.setFile("*.txt;*.java");
			fileDialog.show();
			String file = fileDialog.getFile();
			String directory = fileDialog.getDirectory();
			if (file != null) {
				fns = directory + file;
				try {
					osw = new OutputStreamWriter(new BufferedOutputStream(
							new FileOutputStream(fns)));
					osw.write(ta.getText(), 0, ta.getText().length());
					osw.close();
					fileStatus.setText("file saved");
				} catch (IOException e) {
				}
			}
		} else if (ae.getSource() == menuFileExit) {
			System.exit(0);
		} else if (ae.getSource() == menuEditUndo) {
			if (undo.canUndo()) {
				try {
					undo.undo();
				} catch (CannotUndoException ex) {
					System.out.println("Unable to undo: " + ex);
					ex.printStackTrace();
				}
				if (!undo.canUndo())
					menuEditUndo.setEnabled(false);
			}
			// else
			// menuEditUndo.setEnabled(false);
		} else if (ae.getSource() == menuEditRedo) {
			// todo...
		} else if (ae.getSource() == menuEditCut) {
			ta.cut();
		} else if (ae.getSource() == menuEditCopy) {
			ta.copy();
		} else if (ae.getSource() == menuEditPaste) {
			ta.paste();
		} else if (ae.getSource() == menuEditDeleteSelection) {
			ta.replaceRange("", ta.getSelectionStart(), ta.getSelectionEnd());
		} else if (ae.getSource() == menuEditDeleteLine) {
			String str = ta.getText();
			int pos = ta.getCaretPosition();
			int lineStart = 0, lineEnd = 0;
			lineStart = str.substring(0, pos).lastIndexOf('\12');
			lineEnd = str.indexOf('\15', pos);
			lineStart = (lineStart == -1) ? 0 : (lineStart - 1);
			ta.replaceRange("", lineStart, lineEnd);
			lineStart = (lineStart == 0) ? 0 : (lineStart + 2);
			ta.setCaretPosition(lineStart);
		} else if (ae.getSource() == menuEditDeleteWord) {
			String str = ta.getText();
			int pos = ta.getCaretPosition();
			int wordStart = 0, wordEnd = 0;
			wordEnd = wordLocation(str, pos, true);
			if (wordEnd == pos) {
				wordStart = pos;
				wordEnd = pos + 1;
				ta.replaceRange("", wordStart, wordEnd);
			} else {
				wordStart = wordLocation(str, pos, false);
				if (wordStart == -1)
					ta.replaceRange("", 0, wordEnd);
				else
					ta.replaceRange("", wordStart, wordEnd);
			}
		} else if (ae.getSource() == menuEditFind) {
			JDialog ds = new JDialog(this, "Find", true);
			ds.getContentPane().setLayout(new FlowLayout());
			ds.setResizable(false);
			tfs = new TextField(15);
			ds.getContentPane().add(tfs);
			bs = new Button("Find");
			bs.addActionListener(this);
			Button bsc = new Button("Cancel");
			bsc.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent bOke) {
					dispose();
					foundCount = 0;
				}
			});
			ds.getContentPane().add(bs);
			ds.getContentPane().add(bsc);
			JLabel dsMessage1 = new JLabel("Found counts: ");
			dsMessage2 = new JLabel(" 0");
			dsLoop = new Checkbox("Loop");
			dsLoop.setState(findingLoop);

⌨️ 快捷键说明

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