📄 notepad.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package javaapplication6; //import java packages import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import java.io.*; import javax.swing.undo.*; import javax.swing.border.*; import javax.swing.*; import javax.swing.text.*; import javax.swing.event.*; import java.awt.datatransfer.*; public class Notepad extends JFrame implements ActionListener/*,DocumentListener*/{ //定义变量 //菜单 JMenu fileMenu,editMenu,formatMenu; //"文件"的菜单项 JMenuItem fileMenu_New,fileMenu_Open,fileMenu_Save,fileMenu_SaveAs,fileMenu_PageSetup,fileMenu_Print,fileMenu_Exit; //"编辑"的菜单项 JMenuItem editMenu_Undo,editMenu_Redo,editMenu_Cut,editMenu_Copy,editMenu_Paste,editMenu_Delete,editMenu_Find,editMenu_FindNext,editMenu_Replace, editMenu_GoTo,editMenu_SelectAll,editMenu_TimeDate; //"格式"的菜单项 JCheckBoxMenuItem formatMenu_LineWrap; JMenu formatMenu_Color; JMenuItem formatMenu_Font,formatMenu_Color_FgColor,formatMenu_Color_BgColor; //"帮助"的菜单项 JMenuItem helpMenu_HelpTopics,helpMenu_About; //文本编辑区域 JTextArea editArea; //状态栏标签 JLabel statusLabel; //弹出菜单及菜单项 JPopupMenu popupMenu; JMenuItem popupMenu_Undo,popupMenu_Redo,popupMenu_Cut,popupMenu_Copy,popupMenu_Paste,popupMenu_Delete,popupMenu_SelectAll; //系统剪贴板 Toolkit toolKit=Toolkit.getDefaultToolkit(); Clipboard clipBoard=toolKit.getSystemClipboard(); //其它变量 boolean isNewFile=true; //是否新文件(未保存过的) File currentFile; //当前文件名 String oldValue; //存放编辑区原来的内容,用于比较文本是否有改动 JButton fontOkButton; //字体设置里的"确定"按钮 //创建撤消操作管理器/* protected UndoManager undo = new UndoManager(); protected UndoableEditListener undoHandler = new UndoHandler();*/ //设置编辑区默认字体 protected Font defaultFont=new Font("宋体",Font.PLAIN,12); //构造函数开始 public Notepad() { super("欢迎使用"); //获取容器 Container container=getContentPane(); //创建菜单条 JMenuBar menuBar = new JMenuBar(); //创建文件菜单及菜单项并注册事件监听 JMenu fileMenu = new JMenu("文件(F)", true); fileMenu.setMnemonic('F'); fileMenu_New = new JMenuItem("新建(N)", 'N'); fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); fileMenu_New.addActionListener(this); fileMenu_Open = new JMenuItem("打开(O)...", 'O'); fileMenu_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); fileMenu_Open.addActionListener(this); fileMenu_Save = new JMenuItem("保存(S)", 'S'); fileMenu_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); fileMenu_Save.addActionListener(this); fileMenu_SaveAs = new JMenuItem("另存为(A)...", 'A'); fileMenu_SaveAs.addActionListener(this); fileMenu_Exit = new JMenuItem("退出(X)",'X'); fileMenu_Exit.addActionListener(this); //创建编辑菜单及菜单项并注册事件监听 JMenu editMenu = new JMenu("编辑(E)", true); editMenu.setMnemonic('E'); editMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ } } ); editMenu_Cut = new JMenuItem("剪切(T)",'T'); editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); editMenu_Cut.addActionListener(this); editMenu_Copy = new JMenuItem("复制(C)",'C'); editMenu_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); editMenu_Copy.addActionListener(this); editMenu_Paste = new JMenuItem("粘贴(P)",'P'); editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu_Paste.addActionListener(this); editMenu_Delete = new JMenuItem("删除(L)",'L'); editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); editMenu_Delete.addActionListener(this); editMenu_Find = new JMenuItem("查找(F)...",'F'); editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); editMenu_Find.addActionListener(this); editMenu_FindNext = new JMenuItem("查找下一个(N)",'N'); editMenu_FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0)); editMenu_FindNext.addActionListener(this); editMenu_Replace = new JMenuItem("替换(R)...",'R'); editMenu_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK)); editMenu_Replace.addActionListener(this); editMenu_GoTo = new JMenuItem("转到(G)...",'G'); editMenu_GoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK)); editMenu_GoTo.addActionListener(this); editMenu_SelectAll = new JMenuItem("全选",'A'); editMenu_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); editMenu_SelectAll.addActionListener(this); editMenu_TimeDate = new JMenuItem("时间/日期(D)",'D'); editMenu_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0)); editMenu_TimeDate.addActionListener(this); //创建格式菜单及菜单项并注册事件监听 JMenu formatMenu = new JMenu("格式(O)", true); formatMenu.setMnemonic('O'); formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)"); formatMenu_LineWrap.setMnemonic('W'); formatMenu_LineWrap.setState(true); formatMenu_LineWrap.addActionListener(this); formatMenu_Font = new JMenuItem("字体(F)...",'F'); formatMenu_Font.addActionListener(this); formatMenu_Color = new JMenu("设置颜色"); formatMenu_Color_FgColor=new JMenuItem("字体颜色"); formatMenu_Color_FgColor.addActionListener(this); formatMenu_Color_BgColor=new JMenuItem("背景颜色"); formatMenu_Color_BgColor.addActionListener(this); addWindowListener(new closeWindow()); //向菜单条添加"文件"菜单及菜单项 menuBar.add(fileMenu); fileMenu.add(fileMenu_New); fileMenu.add(fileMenu_Open); fileMenu.add(fileMenu_Save); fileMenu.add(fileMenu_SaveAs); fileMenu.addSeparator(); //分隔线 fileMenu.add(fileMenu_Exit); //向菜单条添加"编辑"菜单及菜单项 menuBar.add(editMenu); editMenu.addSeparator(); //分隔线 editMenu.add(editMenu_Cut); editMenu.add(editMenu_Copy); editMenu.add(editMenu_Paste); editMenu.add(editMenu_Delete); editMenu.addSeparator(); //分隔线 editMenu.add(editMenu_Find); editMenu.add(editMenu_FindNext); editMenu.add(editMenu_Replace); editMenu.addSeparator(); //分隔线 editMenu.add(editMenu_SelectAll); editMenu.add(editMenu_TimeDate); //向菜单条添加"格式"菜单及菜单项 menuBar.add(formatMenu); formatMenu.add(formatMenu_Font); formatMenu.addSeparator(); formatMenu.add(formatMenu_Color); formatMenu_Color.add(formatMenu_Color_FgColor); formatMenu_Color.add(formatMenu_Color_BgColor); //向窗口添加菜单条 this.setJMenuBar(menuBar); //创建文本编辑区并添加滚动条 editArea=new JTextArea(20,50); JScrollPane scroller=new JScrollPane(editArea); scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); container.add(scroller,BorderLayout.CENTER);//向容器添加文本编辑区 editArea.setWrapStyleWord(true); //设置单词在一行不足容纳时换行 editArea.setLineWrap(true); //设置文本编辑区自动换行默认为true,即会"自动换行" editArea.setFont(defaultFont); //设置编辑区默认字体 editArea.setBackground(Color.white); //设置编辑区默认背景色 editArea.setForeground(Color.black); //设置编辑区默认前景色 oldValue=editArea.getText(); //获取原文本编辑区的内容 //创建右键弹出菜单 popupMenu=new JPopupMenu(); popupMenu_Undo=new JMenuItem("撤消(U)",'U'); popupMenu_Redo=new JMenuItem("重做(R)",'R'); popupMenu_Cut =new JMenuItem("剪切(T)",'T'); popupMenu_Copy=new JMenuItem("复制(C)",'C'); popupMenu_Paste=new JMenuItem("粘贴(P)",'P'); popupMenu_Delete=new JMenuItem("删除(D)",'D'); popupMenu_SelectAll=new JMenuItem("全选(A)",'A'); popupMenu_Undo.setEnabled(false); //撤消选项初始设为不可用 popupMenu_Redo.setEnabled(false); //重做选项初始设为不可用 //向右键菜单添加菜单项和分隔符 popupMenu.add(popupMenu_Undo); popupMenu.add(popupMenu_Redo); popupMenu.addSeparator(); popupMenu.add(popupMenu_Cut); popupMenu.add(popupMenu_Copy); popupMenu.add(popupMenu_Paste); popupMenu.add(popupMenu_Delete); popupMenu.addSeparator(); popupMenu.add(popupMenu_SelectAll); //右键菜单注册事件 popupMenu_Undo.addActionListener(this); popupMenu_Redo.addActionListener(this); popupMenu_Cut.addActionListener(this); popupMenu_Copy.addActionListener(this); popupMenu_Paste.addActionListener(this); popupMenu_Delete.addActionListener(this); popupMenu_SelectAll.addActionListener(this); //文本编辑区注册右键菜单事件 editArea.addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e) { checkForTriggerEvent(e); } public void mouseReleased(MouseEvent e) { checkForTriggerEvent(e); } private void checkForTriggerEvent(MouseEvent e) { if(e.isPopupTrigger()) popupMenu.show(e.getComponent(),e.getX(),e.getY()); editArea.requestFocus(); //编辑区获取焦点 } }); //创建和添加状态栏 statusLabel=new JLabel(" 按F1获取帮助"); container.add(statusLabel,BorderLayout.SOUTH); //改变标题栏窗口左侧默认图标 Toolkit tk=Toolkit.getDefaultToolkit(); Image image=tk.createImage("Icons/notepad.gif"); this.setIconImage(image); //设置窗口在屏幕上的位置、大小和可见性 this.setLocation(100,100); this.setSize(650,550); this.setVisible(true); editArea.requestFocus(); } /*构造函数Notepad结束*/ //查找与替换功能 public void mySearch(){ final JDialog findDialog=new JDialog(this,"查找与替换",true); Container con=findDialog.getContentPane(); con.setLayout(new FlowLayout(FlowLayout.LEFT)); JLabel searchContentLabel=new JLabel("查找内容(N) :"); JLabel replaceContentLabel=new JLabel("替换为(P) :"); final JTextField findText=new JTextField(30); final JTextField replaceText=new JTextField(30); final JCheckBox matchcase =new JCheckBox("区分大小写(C)"); ButtonGroup bGroup=new ButtonGroup(); final JRadioButton up=new JRadioButton("向上(U)"); final JRadioButton down=new JRadioButton("向下(D)"); down.setSelected(true); bGroup.add(up); bGroup.add(down); JButton searchNext=new JButton("查找下一个(F)"); JButton replace=new JButton("替换(R)"); final JButton replaceAll=new JButton("全部替换(A)"); //"替换"按钮的事件处理 replace.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(replaceText.getText().length() == 0 && editArea.getSelectedText()!=null) editArea.replaceSelection(""); if(replaceText.getText().length() > 0 && editArea.getSelectedText()!= null) editArea.replaceSelection(replaceText.getText()); } }); //"替换全部"按钮的事件处理 replaceAll.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ editArea.setCaretPosition(0); //将光标放到编辑区开头 int a=0,b=0,replaceCount=0; if(findText.getText().length()==0) { JOptionPane.showMessageDialog(findDialog,"请填写查找内容!","提示",JOptionPane.WARNING_MESSAGE); findText.requestFocus(true); return; } while( a > -1) { int FindStartPos=editArea.getCaretPosition(); String str1, str2, str3, str4, strA, strB; str1 = editArea.getText(); str2 = str1.toLowerCase(); str3 = findText.getText(); str4 = str3.toLowerCase(); if(matchcase.isSelected()) { strA = str1; strB = str3; } else { strA = str2; strB = str4; } if(up.isSelected()){ if(editArea.getSelectedText()==null){ a = strA.lastIndexOf(strB, FindStartPos-1); } else { a = strA.lastIndexOf(strB, FindStartPos-findText.getText().length()-1); } } else if(down.isSelected()) { if(editArea.getSelectedText()==null){ a = strA.indexOf(strB, FindStartPos); } else { a=strA.indexOf(strB,FindStartPos-findText.getText().length()+1); } } if(a > -1) { if(up.isSelected()){ editArea.setCaretPosition(a); b = findText.getText().length(); editArea.select(a, a + b); } else if(down.isSelected()){ editArea.setCaretPosition(a); b = findText.getText().length(); editArea.select(a, a + b); } } else { if(replaceCount==0){ JOptionPane.showMessageDialog(findDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(findDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE); } } if(replaceText.getText().length() == 0 && editArea.getSelectedText() != null){ editArea.replaceSelection(""); replaceCount++; } if(replaceText.getText().length() > 0 && editArea.getSelectedText() != null) { editArea.replaceSelection(replaceText.getText()); replaceCount++; } }//end while } }); /*"替换全部"按钮的事件处理结束*/ //"查找下一个"按钮事件处理 searchNext.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int a = 0, b =0; int FindStartPos=editArea.getCaretPosition(); String str1, str2, str3, str4, strA, strB; str1 = editArea.getText(); str2 = str1.toLowerCase(); str3 = findText.getText(); str4 = str3.toLowerCase(); //"区分大小写"的CheckBox被选中 if(matchcase.isSelected()) { strA = str1; strB = str3; } else { strA = str2; strB = str4; } if(up.isSelected()){ if(editArea.getSelectedText()==null){ a = strA.lastIndexOf(strB, FindStartPos-1); } else{ a = strA.lastIndexOf(strB, FindStartPos-findText.getText().length()-1); } } else if(down.isSelected()){ if(editArea.getSelectedText()==null){ a = strA.indexOf(strB, FindStartPos); } else{ a=strA.indexOf(strB,FindStartPos-findText.getText().length()+1); } } if(a > -1) { if(up.isSelected()){ editArea.setCaretPosition(a); b = findText.getText().length(); editArea.select(a, a + b); } else if(down.isSelected()){ editArea.setCaretPosition(a); b = findText.getText().length(); editArea.select(a, a + b); } } else { JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE); } } });/*"查找下一个"按钮事件处理结束*/ //"取消"按钮及事件处理 JButton cancel=new JButton("取消"); cancel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ findDialog.dispose(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -