📄 mymenubar.java
字号:
import java.awt.*;import java.awt.event.*;import java.io.*;import java.awt.datatransfer.*;public class MyMenuBar extends MenuBar{//菜单栏,主要是对MenuBar的应用public MyMenuBar(Frame parent){ parent.setMenuBar(this); }public void addMenu(String[]menus){//添加菜单 for(int i=0;i<menus.length;i++) add(new Menu(menus[i])); }public void addMenuItems(int menuNumber,String[]items){//添加菜单中的子项菜单或分隔符 for(int i=0;i<items.length;i++){ if(items[i]!=null) getMenu(menuNumber).add(new MenuItem(items[i])); else getMenu(menuNumber).addSeparator(); } }public void addActionListener(ActionListener al){ for(int i=0;i<getMenuCount();i++) for(int j=0;j<getMenu(i).getItemCount();j++) getMenu(i).getItem(j).addActionListener(al); }}class MyFile{//对文件进行操作,打开或者保存,主要是对Dialog的应用 private FileDialog fDlg; public MyFile(Frame parent){ fDlg=new FileDialog(parent,"",FileDialog.LOAD); } private String getPath(){//获得打开文件的路径 return fDlg.getDirectory()+"\\"+fDlg.getFile(); } public String getData()throws Exception{//读取打开文件的内容 fDlg.setTitle("打开"); fDlg.setMode(FileDialog.LOAD); fDlg.setVisible(true); BufferedReader br=new BufferedReader(new FileReader(getPath())); StringBuffer sb=new StringBuffer(); String aline; while((aline=br.readLine())!=null) sb.append(aline+'\n'); br.close(); return sb.toString(); } public void setData(String data)throws Exception{//保存文件 fDlg.setTitle("保存"); fDlg.setMode(FileDialog.SAVE); fDlg.setVisible(true); BufferedWriter bw=new BufferedWriter(new FileWriter(getPath())); bw.write(data); bw.close(); }}class MyClipboard{//剪贴板的应用 private Clipboard cb; public MyClipboard(){ cb=Toolkit.getDefaultToolkit().getSystemClipboard(); } public void setData(String data){//内容暂存于剪贴板 cb.setContents(new StringSelection(data),null); } public String getData(){//获取剪贴板的内容 Transferable content=cb.getContents(null); try{ return (String)content.getTransferData(DataFlavor.stringFlavor); }catch(Exception exp){} return null; }}class MyFindDialog extends Dialog implements ActionListener{//为查找和替换设计框架,并且实现相应的功能 private Label lFind=new Label("查找字符串"); private Label lReplace=new Label("替换字符串"); private TextField tFind=new TextField(10); private TextField tReplace=new TextField(10); private Button bFind=new Button("查找"); private Button bReplace=new Button("替换"); private TextArea ta; public MyFindDialog(Frame owner,TextArea ta){ super(owner,"查找",false); this.ta=ta; //完成控件的布局,同时有关的其他设计 setLayout(null); lFind.setBounds(10,30,80,20); lReplace.setBounds(10,70,80,20); tFind.setBounds(90,30,90,20); tReplace.setBounds(90,70,90,20); bFind.setBounds(190,30,80,20); bReplace.setBounds(190,70,80,20); add(lFind);add(tFind);add(bFind);add(lReplace); add(tReplace);add(bReplace); setResizable(false); bFind.addActionListener(this); bReplace.addActionListener(this); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ MyFindDialog.this.dispose(); } }); } public void showFind(){ setTitle("查找");setSize(280,60);setVisible(true); } public void showReplace(){ setTitle("查找替换");setSize(280,60);setVisible(true); } private void find(){//实现查找功能 String text=ta.getText(); String str=tFind.getText(); int end=text.length(); int len=str.length(); int start=ta.getSelectionEnd(); if(start==end)start=0; for(;start<=end-len;start++){ if(text.substring(start,start+len).equals(str)){ ta.setSelectionStart(start); ta.setSelectionEnd(start+len); return; } } ta.setSelectionStart(end); ta.setSelectionEnd(end); } private void replace(){//实现替换功能 String str=tReplace.getText(); if(ta.getSelectedText().equals(tFind.getText())) ta.replaceRange(str, ta.getSelectionStart(), ta.getSelectionEnd()); else find(); } public void actionPerformed(ActionEvent e){ if(e.getSource()==bFind) find(); else if(e.getSource()==bReplace) replace(); }} class MyMemo extends Frame implements ActionListener { private TextArea editor=new TextArea(); private MyFile mf=new MyFile(this); private MyClipboard cb=new MyClipboard(); private MyFindDialog findDlg=new MyFindDialog(this,editor); public MyMemo(String tittle){ super(tittle); MyMenuBar mb=new MyMenuBar(this); mb.addMenu(new String[]{"文件","编辑","查找","帮助"}); mb.addMenuItems(0,new String[]{"新建","打开","保存",null,"退出"}); mb.addMenuItems(1, new String[]{"剪贴","复制","粘贴","清除",null,"全选"}); mb.addMenuItems(2, new String[]{"查找",null,"查找替换"}); mb.addMenuItems(3, new String[]{"我的记事本"}); add(editor); mb.addActionListener(this); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ MyMemo.this.dispose(); } }); } public void actionPerformed(ActionEvent e){ String selected=e.getActionCommand(); if(selected.equals("新建")) editor.setText(""); else if (selected.equals("打开")){ try{ editor.setText(mf.getData()); }catch(Exception exp){} } else if(selected.equals("保存")){ try{ mf.setData(editor.getText()); }catch(Exception exp){} } else if(selected.equals("退出")){ dispose(); } else if(selected.equals("剪贴")){ cb.setData(editor.getSelectedText()); editor.replaceRange("", editor.getSelectionStart(), editor.getSelectionEnd()); } else if(selected.equals("复制")){ cb.setData(editor.getSelectedText()); } else if(selected.equals("粘贴")){ String str=cb.getData(); editor.replaceRange(str, editor.getSelectionStart() , editor.getSelectionEnd()); } else if(selected.equals("清除")){ editor.replaceRange("", editor.getSelectionStart(),editor.getSelectionEnd()); } else if(selected.equals("全选")){ editor.setSelectionStart(0); editor.setSelectionEnd(editor.getText().length()); } else if(selected.equals("查找")){ findDlg.showFind(); } else if(selected.equals("查找替换")){ findDlg.showReplace(); } } public static void main(String[]args){ MyMemo memo=new MyMemo("NotePad"); memo.setSize(600,400); memo.setLocation(300,100); memo.setVisible(true); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -