zoukankan      html  css  js  c++  java
  • 记事本应用程序java源代码

    package aaa;

    /* AWT Sample application "记事本应用程序java源代码"

    * @author Amiry

    * @version 1.00 07/05/25

    */

    import java.awt.*; //导入抽象窗口工具集包(abstract window toolkit)

    import java.awt.event.*; //导入窗口事件工具包

    import java.io.*; //导入输入输出工具包

    import java.awt.datatransfer.*; //导入数据转化工具包

    //菜单工具条类(添加菜单项,子菜单)

    class MyMenuBar extends MenuBar{//MyMenuBar类继承MenuBar类(类方法)

    public MyMenuBar(Frame parent){ //构造函数

    parent.setMenuBar(this); //向parent添加自身

    }

    public void addMenus(String[] menus){ //菜单条下添加菜单项

    for(int i=0;i<menus.length;i++)

    add(new Menu(menus[i]));

    }

    public void addMenuItems(intmenuNumber,String[] items){ //菜单添加(类方法)

    for(int i=0;i<items.length;i++){ //循环0~menus.length-1次

    if(items[i]!=null) //向各个菜单项添加子菜单

    getMenu(menuNumber).add(newMenuItem(items[i]));

    else getMenu(menuNumber).addSeparator();

    }

    }

    public voidaddActionListener(ActionListener a1){//注册所有动作监听对象(类方法)

    for(int i=0;i<getMenuCount();i++) //循环到菜第i个菜单数

    for(intj=0;j<getMenu(i).getItemCount();j++) //向第i个菜单的第j个子菜单注册动作事件监听

    getMenu(i).getItem(j).addActionListener(a1);

    }

    }

    //文件管理类(处理文件的打开,保存等,拥有文件对话框成员)

    class MyFile{ //MyFile类定义

    private FileDialog fDlg; //声明一个文件对话框(类成员)

    public MyFile(Frame parent){ //构造函数(类方法)

    fDlg=newFileDialog(parent,"",FileDialog.LOAD);//初始化文件对话框

    }

    private String getPath(){ //(类方法)

    returnfDlg.getDirectory()+"\\"+fDlg.getFile(); //返回选中文件的路径

    }

    public String getData() throws IOException{

    fDlg.setTitle("打开"); //设定文件对话框的标题为"打开"

    fDlg.setMode(FileDialog.LOAD); //将文件对话框的模式设定为打开模式

    fDlg.setVisible(true); //显示文件对话框

    //读取文件对话框选中的文件的内容并将其返回

    BufferedReader br=new BufferedReader(newFileReader(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) throwsIOException{

    //显示保存模式对话框,并将数据data存入选中的文件中

    fDlg.setTitle("保存");

    fDlg.setMode(FileDialog.LOAD);

    fDlg.setVisible(true);

    BufferedWriter bw=new BufferedWriter(newFileWriter(getPath()));

    bw.write(data);

    bw.close();

    }

    }

    //文本管理类(提供记事本的剪贴,复制,粘贴等功能)

    class MyClipboard{ //获取系统剪贴板

    private Clipboard cb; //声明剪贴板对象

    public MyClipboard(){ //构造函数,获取系统剪贴板

    cb=Toolkit.getDefaultToolkit().getSystemClipboard();

    }

    public void setData(String data){ //将字符串存入剪贴板

    cb.setContents(newStringSelection(data),null);

    }

    public String getData(){ //从剪贴板读取数据,并将其返回

    Transferable content=cb.getContents(null);

    try{

    return(String)content.getTransferData(DataFlavor.stringFlavor);

    }catch(Exception ue){}

    return null;

    }

    }

    //查找替换类(用于查找TextArea中特定字符串功能,并替换特定字符串

    class MyFindDialog extends Dialogimplements ActionListener{

    private Label lFind=new Label("查找字符串");

    private Label lReplace=new Label("替换字符串");

    private TextField tFind=new TextField(10);//接受待查字符串TextField

    private TextField tReplace=newTextField(10); //接受要替换字符串TextField

    private Button bFind=new Button("查找"); //创建查找按钮

    private Button bReplace=new Button("替换"); //替换按钮

    private TextArea ta; //ta为含有待查字符串的TextField

    public MyFindDialog(Frame owner,TextAreata){ //构造函数

    super(owner,"查找",false); //非模式对话框

    this.ta=ta;

    setLayout(null); //将Layout设为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); //为bFind添加监听对象

    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,110); //设定大小

    setVisible(true);

    }

    private void find(){ //查询方法

    String text=ta.getText(); //从ta中获取字符串,并存入text中

    String str=tFind.getText(); //获取tFind字符串,并存入text中

    int end=text.length(); //获取ta字符串的长度

    int len=str.length(); //获取tFind字符串的长度

    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()方法

    find();

    else if(e.getSource()==bReplace) //按下"替换"按钮,调用replace()方法

    replace();

    }

    }

    public class MyMemo extends Frameimplements ActionListener{

    private TextArea editor=new TextArea(); //创建文本编辑区

    private MyFile mf=new MyFile(this); //创建文件

    private MyClipboard cb=new MyClipboard();//创建剪贴板

    private MyFindDialog findDlg=newMyFindDialog(this,editor);//创建查找对话框

    public MyMemo(String title){

    //构造函数,调用父类的构造函数设定标题

    super(title);

    //创建菜单条

    MyMenuBar mb=new MyMenuBar(this);

    //向菜单条中菜单添加文件,编辑,查找,帮助4个菜单项

    mb.addMenus(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(IOException ie){}

    }else if(selected.equals("保存")){ //执行"保存"命令

    try{ //可能出现异常

    mf.setData(editor.getText());

    }catch(IOException ie){}

    }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.showReplace();

    }

    else if(selected.equals("查找替换")){ //执行"查找替换"命令

    findDlg.showReplace();

    }

    }

    public static void main(String[] args) { //主函数体

    MyMemo memo=new MyMemo("我的记事本"); //创建我的记事本

    memo.setSize(300,300); //大小宽300,高300

    memo.setVisible(true); //显示窗口

    }

    }

    廖世勇
  • 相关阅读:
    Sum Root to Leaf Numbers——LeetCode
    Search a 2D Matrix ——LeetCode
    Surrounded Regions——LeetCode
    Palindrome Partitioning——LeetCode
    Reverse Linked List II——LeetCode
    Word Break II——LeetCode
    POJ1163——The Triangle
    3Sum Closest——LeetCode
    House Robber——LeetCode
    amqp 抓包
  • 原文地址:https://www.cnblogs.com/liaoshiyong/p/3150964.html
Copyright © 2011-2022 走看看