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

📄 notepad.java

📁 设计一个类似于Windows系统记事本的程序
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.border.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;
public class Notepad {
	public static void main(String[] args) {
		UserInterface Notepad = new UserInterface();
		Notepad.startApp();
	}
}
class UserInterface {
	static final long serialVersionUID = -4974434346775996938L;

	//	设置界面
	JFrame frame = new JFrame("无标题-记事本");
	
	// 设置菜单项目
	JMenuItem 
			menuFileNew, menuFileOpen, menuFileSave, menuFileSaveAs,menuFileExit,
			menuEditcanUndo,menuEditCut, menuEditCopy,	menuEditPaste, menuEditDeleteSelection, 
			menuEditFind,menuEditFindNext, menuEditReplace,menuEditGoTo, menuSelectAll,
			menuEditDate,menuHelpAbout,menuz;
	
	//设置可选择菜单
	JCheckBoxMenuItem menuViewWordWrap;
	
	//	设置菜单分类
	JMenu menuFile, menuEdit, menuView, menuHelp;
	
	//	设置右键菜单项目
	JMenuItem
		RCMenucanUndo, RCMenuCut, RCMenuCopy, RCMenuPaste, RCMenuDeleteSelection,RCMenuSelectAll;
	
	//	设置菜单条
	JMenuBar mb = new JMenuBar();
	JPopupMenu popup = new JPopupMenu();
	
	//	设置文本编辑区
	JScrollPane scrollPane;
	JTextArea textArea;
	
	//	设置监听器
	MyListener ML = new MyListener();
	PopupListener PL = new PopupListener();
	
	//	设置其它系统参数
	boolean isFileSave = false;
	boolean isFileNew  = true;
	int receiveReturnPara;
	
	private void setMenu() {
		//	----------	设置菜单分类	----------
		menuFile = new JMenu("文件(F)	", true);
		menuFile.setMnemonic(KeyEvent.VK_F);
		
		menuEdit = new JMenu("编辑(E)", true);
		menuEdit.setMnemonic(KeyEvent.VK_E);
		
		menuView = new JMenu("格式(O)", true);
		menuView.setMnemonic(KeyEvent.VK_O);
		
		menuHelp = new JMenu("帮助(H)", true);
		menuHelp.setMnemonic(KeyEvent.VK_H);
		//	----------	菜单分类结束	----------
		
		
		// 文件 新建菜单
		menuFileNew = new JMenuItem("新建(N)", 'N');
		menuFileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
				InputEvent.CTRL_MASK));
		menuFileNew.addActionListener(ML);

		//	文件 打开菜单
		menuFileOpen = new JMenuItem("打开(O)...", 'O');
		menuFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
				InputEvent.CTRL_MASK));
		menuFileOpen.addActionListener(ML);
		
		//	文件 保存菜单
		menuFileSave = new JMenuItem("保存(S)", 'S');
		menuFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				InputEvent.CTRL_MASK));
		menuFileSave.addActionListener(ML);
		
		//	文件 另存为菜单
		menuFileSaveAs = new JMenuItem("另存为(A)...    ", 'A');
		menuFileSaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0));
		menuFileSaveAs.addActionListener(ML);
		
		//	文件 关闭菜单
		menuFileExit = new JMenuItem("退出(X)", 'X');
		menuFileExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,
				InputEvent.ALT_MASK));
		menuFileExit.addActionListener(ML);
		
		//编辑 撤消菜单
		menuEditcanUndo = new JMenuItem("撤消(U)", 'U');
		menuEditcanUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
				InputEvent.CTRL_MASK));
		menuEditcanUndo.addActionListener(ML);
		
		//	编辑 剪切菜单
		menuEditCut = new JMenuItem("剪切(T)   ", 'T');
		menuEditCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
				InputEvent.CTRL_MASK));
		menuEditCut.addActionListener(ML);
		
		//	编辑 复制菜单
		menuEditCopy = new JMenuItem("复制(C)   ", 'C');
		menuEditCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
				InputEvent.CTRL_MASK));
		menuEditCopy.addActionListener(ML);
		
		//	编辑 粘贴菜单
		menuEditPaste = new JMenuItem("粘贴(P)   ", 'P');
		menuEditPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
				InputEvent.CTRL_MASK));
		menuEditPaste.addActionListener(ML);
		
		//	编辑 删除菜单
		menuEditDeleteSelection = new JMenuItem("删除(S)   ", 'S');
		menuEditDeleteSelection.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
		menuEditDeleteSelection.addActionListener(ML);
		
		//编辑 查找菜单
		menuEditFind = new JMenuItem("查找(F)...   ", 'F');
		menuEditFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
				InputEvent.CTRL_MASK));
		menuEditFind.addActionListener(ML);
		
		//编辑 查找下一个菜单
		menuEditFindNext = new JMenuItem("查找下一个(N)   ", 'N');
		menuEditFindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
		menuEditFind.addActionListener(ML);
		
		//	编辑 替换菜单
		menuEditReplace = new JMenuItem("替换(R)...   ", 'R');
		menuEditReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,
				InputEvent.CTRL_MASK));
		menuEditReplace.addActionListener(ML);
		
		//	编辑 转到菜单 
		menuEditGoTo = new JMenuItem("转到(G)...   ", 'G');
		menuEditGoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,
				InputEvent.CTRL_MASK));
		menuEditGoTo.addActionListener(ML);
		
		//	编辑 全选菜单
		menuSelectAll = new JMenuItem("全选(A)   ", 'A');
		menuSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
				InputEvent.CTRL_MASK));
		menuSelectAll.addActionListener(ML);
		
		//	编辑 时间/日期菜单
		menuEditDate = new JMenuItem("时间/日期(D)   ", 'D');
		menuEditDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
		menuEditDate.addActionListener(ML);
				
		//	格式 自动换行
		menuViewWordWrap = new JCheckBoxMenuItem("自动换行   ");
		menuViewWordWrap.setMnemonic('W');
		menuViewWordWrap.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
				InputEvent.CTRL_MASK));
		menuViewWordWrap.setState(false);
		menuViewWordWrap.addActionListener(ML);
	
		//
		menuz = new JMenuItem("字体   ");
		menuz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
				InputEvent.CTRL_MASK));
	    menuz.addActionListener(ML);
		
		
		//	帮助 关于
		menuHelpAbout = new JMenuItem("关于记事本(A)...   ", 'A');
		menuHelpAbout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
		menuHelpAbout.addActionListener(ML);
	}
	
	private void setRightClickMenu() {
		//	设置右键菜单
		RCMenucanUndo = new JMenuItem("撤消(U)   ", 'U');
		RCMenucanUndo.addActionListener(ML);
		
		RCMenuCut = new JMenuItem("剪切(T)   ", 'T');
		RCMenuCut.addActionListener(ML);
		
		RCMenuCopy = new JMenuItem("复制(C)   ", 'C');
		RCMenuCopy.addActionListener(ML);
		
		RCMenuPaste = new JMenuItem("粘贴(P)   ", 'P');
		RCMenuPaste.addActionListener(ML);
		
		RCMenuDeleteSelection = new JMenuItem("删除(D)   ", 'D');
		RCMenuDeleteSelection.addActionListener(ML);
		
		RCMenuSelectAll = new JMenuItem("全选(S)   ", 'S');
		RCMenuSelectAll.addActionListener(ML);
	}

	private void setUI() {
		frame.getContentPane().setLayout(new BorderLayout());
		frame.setJMenuBar(mb);
		JPanel p = new JPanel();
		
		//	为文件菜单添加项目
		mb.add(menuFile);
		menuFile.add(menuFileNew);
		menuFile.add(menuFileOpen);
		menuFile.add(menuFileSave);
		menuFile.add(menuFileSaveAs);
		menuFile.addSeparator();	//	分割线
		menuFile.add(menuFileExit);
		
		//	为编辑菜单添加项目
		mb.add(menuEdit);
		menuEdit.add(menuEditcanUndo);
		menuEdit.addSeparator();
		menuEdit.add(menuEditCut);
		menuEdit.add(menuEditCopy);
		menuEdit.add(menuEditPaste);
		menuEdit.add(menuEditDeleteSelection);
		menuEdit.addSeparator();
		menuEdit.add(menuEditFind);
		menuEdit.add(menuEditFindNext);
		menuEdit.add(menuEditReplace);
		menuEdit.add(menuEditGoTo);
		menuEdit.addSeparator();
		menuEdit.add(menuSelectAll);
		menuEdit.add(menuEditDate);
		
		//	为格式菜单添加项目
		mb.add(menuView);
		menuView.add(menuViewWordWrap);
		menuView.addSeparator();
		menuView.add(menuz);
		
		//	为帮助菜单添加项目
		mb.add(menuHelp);
		menuHelp.add(menuHelpAbout);
		
		//	添加右键菜单
		popup.add(RCMenucanUndo);
		popup.addSeparator();
		popup.add(RCMenuCut);
		popup.add(RCMenuCopy);
		popup.add(RCMenuPaste);
		popup.add(RCMenuDeleteSelection);
		popup.addSeparator();
		popup.add(RCMenuSelectAll);

		//	添加滚动区域
		
		textArea=new JTextArea();
		JScrollPane scroller=new JScrollPane(textArea);
		scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
	
		
	
		//	添加组件
		frame.getContentPane().add(scroller,BorderLayout.CENTER);
		
		//	添加右键菜单响应
		textArea.addMouseListener(PL);
		
		//	添加窗口事件
		frame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				if(!isFileSave) {
					MyActions MA =new MyActions();
					receiveReturnPara = MA.fileNotSaveMessage();
					String s = new String("");
					if (receiveReturnPara == 0){
						//	如果选择“是”,则调用保存文件方法,然后再关闭。
						try {
							PrintWriter out = new PrintWriter(new BufferedWriter(
									new FileWriter((s =MA.fileSaveAs()))));
							out.print(textArea.getText());
							out.close();
						} catch (IOException e1) {
							e1.printStackTrace();
						}
						isFileSave = true;
						System.exit(0);
					} else if (receiveReturnPara == 1) {
						//	如果选择“否”,则直接关闭,并告知文件尚未保存。
						System.exit(0);
					}
				} else
					System.exit(0);
			}
		});
		
		//	设置窗口使可见
		frame.setSize(800,600);
		frame.setVisible(true);
				
	}

	void startApp() {
		try {
			//	把界面设置成windows界面
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		} catch (Exception e) {
		}
		setMenu();
		setRightClickMenu();
		setUI();
	}

	class PopupListener extends MouseAdapter {
		public void mousePressed(MouseEvent e) {
			maybeShowPopup(e);
		}
		public void mouseReleased(MouseEvent e) {
			maybeShowPopup(e);
		}
		private void maybeShowPopup(MouseEvent e) {
			if(e.isPopupTrigger())
				popup.show(((JTextArea)e.getComponent()), e.getX(), e.getY());
		}
	}
	
	class MyListener implements ActionListener {
		MyActions MA = new MyActions();
		void saveFile() {
			try {
				PrintWriter out = new PrintWriter(new BufferedWriter(
						new FileWriter(MA.fileSaveAs())));
				out.print(textArea.getText());
				out.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			isFileSave = true;
		}		
		public void actionPerformed(ActionEvent e) {
			if(e.getSource() == menuFileNew) {
				//	如果没有保存,则在新建文件时候询问
				if(!isFileSave) {
					receiveReturnPara = MA.fileNotSaveMessage();
					if (receiveReturnPara == 0){
						//	如果选择“是”,则调用保存的方法,新建文件,并且告知文件是尚未保存的。
						textArea.setText("");
						isFileSave = false;						
					} else {
						//	如果选择“否”,则直接新建文件,并告知文件尚未保存。
						textArea.setText("");
						isFileSave = false;
					}
				} else
					textArea.setText("");
			}
			else if (e.getSource() == menuFileOpen) {
				//	如果没有保存,则在新建文件时候询问
				if(!isFileSave) {
					receiveReturnPara = MA.fileNotSaveMessage();
					if (receiveReturnPara == 0){
						//	如果选择“是”,则调用保存文件方法,然后再调用打开文件方法。
						//	并且告知新开文件是尚未保存的。
						
						textArea.setText("");
						textArea.setText(MA.fileOpen());
						isFileSave = false;						
					} else {
						//	如果选择“否”,则直接打开文件,并告知文件尚未保存。
						textArea.setText("");
						textArea.setText(MA.fileOpen());
						isFileSave = false;
					}
				} else {
					textArea.setText("");
					textArea.setText(MA.fileOpen());
				}
					
			}
			else if (e.getSource() == menuFileSave) {
				saveFile();				
			}
			else if (e.getSource() == menuFileSaveAs) {
				saveFile();
			}
			else if (e.getSource() == menuFileExit) {
				if(!isFileSave) {
					receiveReturnPara = MA.fileNotSaveMessage();
					if (receiveReturnPara == 0){
						//	如果选择“是”,则调用保存文件方法,然后再关闭。
						saveFile();
						System.exit(1);
					} else {
						//	如果选择“否”,则直接关闭,并告知文件尚未保存。
						System.exit(1);
					}
				} else
					System.exit(1);
			}
			else if ((e.getSource() == menuEditCut) || (e.getSource() == RCMenuCut)) {
				textArea.cut();
			}
			else if ((e.getSource() == menuEditCopy) || (e.getSource() == RCMenuCopy)){
				textArea.copy();
			}
				else if ((e.getSource() == menuEditDeleteSelection) || (e.getSource() == RCMenuDeleteSelection)){
				textArea.replaceSelection("");
			}
			else if ((e.getSource() == menuEditPaste) || (e.getSource() == RCMenuPaste)) {
				textArea.paste();
			}
			else if ((e.getSource() == menuSelectAll) || (e.getSource() == RCMenuSelectAll)) {
				textArea.selectAll();
			}
			else if(e.getSource() == menuViewWordWrap) {
				if (menuViewWordWrap.getState()) {
					textArea.setLineWrap(true);
				} else {
					textArea.setLineWrap(false);
				}
			}
			else if (e.getSource() == menuEditDate) {
				textArea.requestFocus();
				SimpleDateFormat currentDateTime = new SimpleDateFormat("HH:mm yyyy-MM-dd"); 
				textArea.insert(currentDateTime.format(new Date()),textArea.getCaretPosition());
			}
			else if(e.getSource() == menuHelpAbout) {
				JOptionPane.showConfirmDialog(null, 
						"         ====欢迎使用记事本 ====\njmt062-16号、44号、48号共同制作",
						"关于",JOptionPane.CLOSED_OPTION);
			}
		}
	}
}

⌨️ 快捷键说明

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