`
xuxujiang0
  • 浏览: 18769 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

记事本代码(部分未完成)

 
阅读更多

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;

public class Notepad extends JFrame{
    JMenuItem newFile,open,save,saveAs,exit;
    JMenuItem revocation,cut,copy,paste,delete,find,findNext,replace,date;
    JMenuItem script;
    JMenuItem zhuangTai;
    JMenuItem zhuTi,helpZhuTi;
   
    JTextArea jta;
    JScrollPane jsp;
    JFileChooser fileChooser;
    JPopupMenu popUpMenu;
    JButton jb,jb1;
    JTextField jt,jt1;
    JLabel stateBar;
    int i = 0;
    int u = 0;
    //构造方法
    public Notepad() {
        super("新建文本文件");
        this.setLocation(300,150);
        this.setSize(600,500);
        myFrame();
        this.setVisible(true);
    }
    public void myFrame() {
        //文本编辑区域
        jta = new JTextArea();
        jta.setFont(new Font("宋体",Font.PLAIN,16)); //设置默认字体
        jta.setLineWrap(true);
        jta.setDragEnabled(true);
        jsp = new JScrollPane(jta);  
       
        fileChooser = new JFileChooser();
       
        JMenuBar jmb = new JMenuBar();
        JMenu file = new JMenu("文件(F)");
        JMenu edit = new JMenu("编辑(E)");
        JMenu form = new JMenu("格式(O)");
        JMenu check = new JMenu("查看(V)");
        JMenu help = new JMenu("帮助(H)");
       
        newFile = new JMenuItem("新建(N)   Ctrl+N");
        open = new JMenuItem("打开(O)   Ctrl+O");
        //设置快捷键
        open.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_O,
                        InputEvent.CTRL_MASK));
        save = new JMenuItem("保存(S)   Ctrl+S");
        save.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_S,
                        InputEvent.CTRL_MASK));
        saveAs = new JMenuItem("另存为(A)...");
        exit = new JMenuItem("退出(Q)");
        exit.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_Q,
                        InputEvent.CTRL_MASK));
        newFile.addActionListener( //新建文件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        newFiles();
                    }
                });
        exit.addActionListener( //退出选项事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        closeFile();
                    }
                });
        save.addActionListener( //保存事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        saveFile();
                    }
                });
        saveAs.addActionListener( //另存为事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        saveFileAs();
                    }
                });
        open.addActionListener( //打开事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        openFile();
                    }
                });
        file.add(newFile);
        file.add(open);
        file.add(save);
        file.add(saveAs);
        file.addSeparator(); // 设置横线
        file.add(exit); 
        revocation = new JMenuItem("撤销");
        revocation.setEnabled(false);
        cut = new JMenuItem("剪切");
        cut.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_X,
                        InputEvent.CTRL_MASK));
        copy = new JMenuItem("复制");
        copy.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_C,
                        InputEvent.CTRL_MASK));
        paste = new JMenuItem("黏贴");
        paste.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_V,
                        InputEvent.CTRL_MASK));
        delete = new JMenuItem("删除");
        find = new JMenuItem("查找");
        find.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_F,
                        InputEvent.CTRL_MASK));
        findNext = new JMenuItem("查找下一个");
        replace = new JMenuItem("替换");
        date = new JMenuItem("时间/日期");
        findNext.setEnabled(false);
        replace.setEnabled(false);
        cut.addActionListener( //剪切事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        cut();
                    }
                });
        copy.addActionListener( //copy事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        copy();
                    }
                });
        paste.addActionListener( //黏贴事件
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    paste();
                }
            });
        delete.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        jta.setText("");
                    }
                });
        date.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        nowDate();
                    }
                });
        find.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        onFind();
                    }
                });
        edit.add(revocation);
        edit.addSeparator();
        edit.add(cut);
        edit.add(copy);
        edit.add(paste);
        edit.add(delete);
        edit.addSeparator();
        edit.add(find);
        edit.add(findNext);
        edit.add(replace);
        edit.addSeparator();
        edit.add(date);
       
        // 编辑区键盘事件
        jta.addKeyListener(
            new KeyAdapter() {
                public void keyTyped(KeyEvent e) {
                    processTextArea();
                }
            }
        );
        // 编辑区鼠标事件
        jta.addMouseListener(
            new MouseAdapter() {
                public void mouseReleased(MouseEvent e) {
                    if(e.getButton() == MouseEvent.BUTTON3)
                        popUpMenu.show(jta, e.getX(), e.getY());
                }
               
                public void mouseClicked(MouseEvent e) {
                    if(e.getButton() == MouseEvent.BUTTON1)
                        popUpMenu.setVisible(false);
                }
            }
        ); 
       
        script = new JMenuItem("字体");
        script.setEnabled(false);
        form.add(script);
       
        zhuangTai = new JMenuItem("状态栏");
        zhuangTai.setEnabled(false);
        check.add(zhuangTai);
       
        zhuTi = new JMenuItem("帮助主题");
        zhuTi.setEnabled(false);
        helpZhuTi = new JMenuItem("关于主题");
        help.add(zhuTi);
        help.addSeparator();
        help.add(helpZhuTi);
        helpZhuTi.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        zhuTi();
                    }
                });
       
        jmb.add(file);
        jmb.add(edit);
        jmb.add(form);
        jmb.add(check);
        jmb.add(help);
       
        // 状态栏
        stateBar = new JLabel("未修改");
        stateBar.setHorizontalAlignment(SwingConstants.RIGHT);
        stateBar.setBorder(
                BorderFactory.createEtchedBorder());
       
        popUpMenu = edit.getPopupMenu();
        
        this.setLayout(new BorderLayout());
        this.add(jmb,BorderLayout.NORTH);
        this.add(jsp,BorderLayout.CENTER);
        this.add(stateBar, BorderLayout.SOUTH);
        this.addWindowListener(
                new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                        closeFile();
                    }
                }
            );
    }
   
    //退出
    private void closeFile() {
        // 是否已保存文件
        if(!isCurrentFileSaved()) {
            // 释放窗口资源,而后关闭程序
            System.exit(1);
        }
        else {
            int option = JOptionPane.showConfirmDialog(
                    null, "文件已修改,是否保存?",
                    "保存文件?", JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE, null);

            switch(option) {
                case JOptionPane.YES_OPTION:
                    saveFile();
                    break;
                case JOptionPane.NO_OPTION:
                   System.exit(1);
            }
        }
    }
    //新建文件
    private void newFiles() {
        if(isCurrentFileSaved()) {
            saveFile();
        }
        stateBar.setText("未修改");
        jta.setText("");
    }
   
    //保存`
    private void saveFile() {
        //从标题栏取得文件名
        File file = new File(getTitle());
        //若指定文件不存在
        if(!file.exists()) {
            saveFileAs();
        } else {
            try {
                BufferedWriter buf = new BufferedWriter(new FileWriter(file));
                buf.write(jta.getText());
                buf.close();
                stateBar.setText("未修改");
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, e.toString(),
                        "写入文件失败",JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    //另存为
    private void saveFileAs() {
        //显示文件对话框
        int option = fileChooser.showSaveDialog(null);
        //确认要选取文件
        if(option == JFileChooser.APPROVE_OPTION) {
            //取得选取文件
            File ff = fileChooser.getSelectedFile();
            //在标题栏上设定文件名称
            setTitle(ff.toString());
            try {
                ff.createNewFile();
                saveFile();
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, e.toString(),
                        "无法新建文件",JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    //检查文件是否修改
    private boolean isCurrentFileSaved() {
        if(stateBar.getText().equals("未修改")) {
            return false;
        }
        else {
            return true;
        }
    }
    //打开文件
    private void openFile() {
        if(!isCurrentFileSaved()) {
            open();//打开
        }else {
            // 显示对话框
            int option = JOptionPane.showConfirmDialog(
                    null, "文件已修改,是否保存?",
                    "保存文件?", JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE, null);
            switch(option) {
                // 确认文件保存
                case JOptionPane.YES_OPTION:
                    saveFile(); // 保存文件
                     break;
               // 放弃文件保存
                case JOptionPane.NO_OPTION:
                    open();
                    break;
            }
        }
    }
   
    private void open() {
        // fileChooser 是 JFileChooser 的实例
        // 显示文件选取的对话框
        int option = fileChooser.showDialog(null, null);
           
        // 使用者按下确认键
        if(option == JFileChooser.APPROVE_OPTION) {
            try {
                // 开启选取的文件
                BufferedReader buf =
                    new BufferedReader(
                       new FileReader(
                         fileChooser.getSelectedFile()));

                // 设定文件标题
                setTitle(fileChooser.getSelectedFile().toString());
                // 清除前一次文件
                jta.setText("");
                // 设定状态栏
                stateBar.setText("未修改");
                // 取得系统相依的换行字符
                String lineSeparator = System.getProperty("line.separator");
                // 读取文件并附加至文字编辑区
                String text;
                while((text = buf.readLine()) != null) {
                    jta.append(text);
                    jta.append(lineSeparator);
                }

                buf.close();
            }  
            catch(IOException e) {
                JOptionPane.showMessageDialog(null, e.toString(),
                    "开启文件失败", JOptionPane.ERROR_MESSAGE);
            }
        }   
    }
    //设置日期
    private void nowDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        jta.append(sdf.format(new Date()));
    }
   
    private void cut() {
        jta.cut();
        stateBar.setText("已修改");
        popUpMenu.setVisible(false);
    }

    private void copy() {
        jta.copy();
        popUpMenu.setVisible(false);   
    }

    private void paste() {
        jta.paste();
        stateBar.setText("已修改");
        popUpMenu.setVisible(false);
    }

    private void processTextArea() {
            stateBar.setText("已修改");
    }
    private void onFind() {
         //查找替换对话框
        JDialog jd = new JDialog();
        jd.setTitle("查找/替换");
        JLabel jl1 = new JLabel("查找:");
        jl1.setBounds(34,10,30,20);
        JLabel jl2 = new JLabel("替换内容:");
        jl2.setBounds(10,40,80,20);
         jt = new JTextField(10);
        jt.setBounds(85,10,105,20);
         jt1 = new JTextField(10);
        jt1.setBounds(85,40,105,20);
        jb = new JButton("查找下一个");
        jb.setBounds(220,10,100,20);
        jb1 = new JButton("逐个替换");
        jb1.setBounds(220,40,100,20);
        jd.setLayout(null);
        jd.setBounds(500,300,350,150);
       
        jd.add(jl1);
        jd.add(jl2);
        jd.add(jt);
        jd.add(jt);
        jd.add(jt1);
        jd.add(jb);
        jd.add(jb1);
        jd.setVisible(true);
        jd.setResizable(false);
       
        //事件管理
        jb.addActionListener(new ActionListener(){ //查找功能
            public void actionPerformed(ActionEvent e) {
                    String s=jt.getText();
                    int x = jta.getText().indexOf(s,i);
                    if (x == -1) {
                        JOptionPane.showMessageDialog(null, "没找到 " + s);
                        i = 0;
                    } else {
                        jta.setSelectionStart(x);
                        jta.setSelectionEnd(x + s.length());
                        i = x + 1;
                    }
            }
            });
        jb1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String s=jt.getText();
                String s1=jt1.getText();
                int x = jta.getText().indexOf(s, u);
                if (x == -1) {
                    JOptionPane.showMessageDialog(null, "没找到 " + s);
                    u = 0;
                } else {
                    jta.setSelectionStart(x);
                    jta.setSelectionEnd(x + s.length());
                    jta.replaceSelection(s1);
                    jta.setSelectionStart(jta.getSelectionEnd()-s1.length());
                    jta.setSelectionEnd(jta.getSelectionEnd());
                    u = x + 1;
                }
            }
        });
    }
   
    //主题
    private void zhuTi() {
        JOptionPane.showMessageDialog(null, "该记事本是由xxx");
    }
   
    //主函数
    public static void main(String[] args) {
        new Notepad();
    }

}

分享到:
评论

相关推荐

    Qt记事本源码

    在描述中提到,这个项目已经实现了记事本大约95%的功能,但有几点未完成,如位置存取、读写注册表、右键菜单汉化以及调用记事本帮助功能。 1. **Qt基础:** - **QApplication**:这是所有Qt应用程序的起点,负责...

    记事本代码-Java课程设计

    【标题】"记事本代码-Java课程设计"是一个典型的Java编程项目,旨在让学生通过实践掌握Java编程语言的基础以及高级特性。在这个项目中,学生通常会构建一个类似于Windows系统中的“记事本”应用程序,具备基本的文字...

    部分记事本C#程序代码

    描述中提到“部分原代码”,这可能意味着开发者已经完成了部分功能,但还有一部分代码没有完成或者存在错误。常见的问题可能涉及到以下几点: 1. **事件处理**:在C#中,用户界面的交互通常通过事件驱动。例如,...

    用VB.NET编写的记事本程序源代码

    VB.NET是Microsoft .NET框架的一部分,是一个面向对象的编程环境,适合开发桌面应用程序,如我们的简易记事本。 记事本程序是一个基础但实用的文本编辑器,它允许用户创建、打开和编辑纯文本文件。在VB.NET中实现...

    Eclipse开发记事本程序

    2. **构建菜单栏**:菜单栏是记事本程序的重要组成部分之一,用于提供各种功能选项。 - 创建一个`JMenuBar`实例并将其设置为主窗口的菜单栏; - 添加四个菜单项:文件、编辑、工具、帮助; - 每个菜单项下面都...

    C#记事本代码

    “交作业分数还不错哦~”暗示这可能是作者完成课程作业的一部分,并且获得了较好的评价,意味着代码质量相对较高,遵循了良好的编程规范,且功能实现得较为完善。 从标签" C# "和" 记事本 "来看,我们可以深入探讨...

    含高光效果的记事本,便于阅读代码

    这种视觉区分有助于快速定位代码中的关键部分,识别语法错误,或者在大量代码中找到特定的语句。 【压缩包子文件的文件名称列表】: "Notepad" 可能表示的是这个记事本程序的主程序文件,可能是一个可执行文件或源...

    java记事本代码

    虽然基础功能已实现,但还存在一些未完成的部分,比如事件监听器的注册和部分UI元素的功能实现。为了完善这个应用程序,开发者需要进一步添加和调试这些功能,以确保所有预期的操作都能正常工作。

    记事本(c#源码)

    源码中的窗体布局、控件属性设置等都是通过这些工具完成的,同时也涉及代码编写来调整细节。 6. 文本处理: 记事本还需要处理文本选中、复制、粘贴、查找替换等功能,这些通常通过操作字符串和文本范围实现。C#...

    Java 记事本 源代码

    【标题】"Java 记事本 源...同时,由于部分功能未完善,它也为有经验的开发者提供了一个改进和扩展代码的机会。通过阅读和理解这段代码,可以深入理解Java Swing或JavaFX库的用法,以及如何实现窗口管理和文本操作。

    基于鸿蒙系统开发的记事本.zip

    例如,用户在手机上开始写笔记,切换到平板电脑时,可以继续未完成的内容。 9. **测试与调试**: 使用DevEco Studio的模拟器或真实设备进行应用测试,可以检查记事本在不同屏幕尺寸和操作场景下的表现,确保功能...

    酷炫记事本

    在资源共享方面,"酷炫记事本"具备云同步功能,用户可以在不同的设备上无缝切换,继续未完成的工作。更重要的是,它支持直接分享代码片段,可以通过链接或嵌入代码的方式,方便地与团队成员或在线社区进行交流。这一...

    JAVA实现记事本的源代码

    - **代码优化**:代码中存在一些未完成或未优化的部分,例如某些方法或变量的声明后并未给出具体实现,这可能需要进一步完善。 - **BUG修复**:根据描述提到的小BUG,需要对代码进行仔细检查并修复,以确保程序的...

    程序员专用记事本

    自动完成能够根据已输入的部分代码提供可能的补全选项,节省输入时间。而代码片段则允许程序员保存常用代码块,如循环、条件语句等,以便快速插入到当前项目中。 安全性是另一个重要方面。"绝对安全"的标签暗示了这...

    Java简单记事本程序

    事件处理是记事本程序的核心部分,它使得用户可以与界面进行交互。例如,当用户点击"打开"或"保存"菜单项时,程序会监听这些事件并执行相应的操作。这通常通过实现`ActionListener`接口并在`actionPerformed`方法中...

    记事本小程序 C#语言编写

    6. **异常处理**: 为了提高程序的健壮性,开发者会在关键代码段添加异常处理机制,如try-catch-finally语句块,以捕获和处理可能出现的错误,如文件未找到、权限问题等。 7. **多线程编程**: 虽然记事本小程序一般...

    java实现记事本程序源代码

    标题 "java实现记事本程序源代码" 描述的是一个使用Java编程语言开发的记事本应用程序,这个程序具备基础的文本编辑功能,如复制和剪贴等,非常适合初学者学习和实践。开发者希望通过这个项目鼓励新手程序员进行探索...

    记事本JAVA源码

    综上所述,这段代码主要展示了如何使用 Java Swing 构建一个简单的记事本程序,包括创建 GUI 界面、实现基本的文件读写操作以及响应用户事件。尽管代码中存在一些不完整的部分,但它仍然是学习 Java Swing 和文件...

    EditPlus记事本类工具

    对于长代码或复杂的结构,EditPlus允许用户折叠代码块,隐藏不重要的部分,使工作区保持整洁,便于聚焦于关键代码。 3. **自动完成**: 提供代码自动完成功能,当用户输入特定关键字或符号时,EditPlus会列出可能...

    C#记事本最详细最全代码 包括所有功能 简单易懂 便于初学者提高水平

    为了保存用户在记事本中所做的修改,我们需要监听`FormClosing`事件,并在该事件中检查是否有未保存的更改,如果有的话,提示用户保存。 总的来说,创建一个全面功能的C#记事本项目,不仅可以帮助初学者熟悉面向...

Global site tag (gtag.js) - Google Analytics