📄 notepad.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 + -