请写一个Java程序,要求如下:实现一个记事本,有基本的功能(如打开,保存,另存为,复制粘贴等)除此之外,有三个文本框,第一个文本框可以输入一个网址,点击查询按钮,会在第二个文本框里显示该网页的内容,再点击统计按钮,会在第三个文本框里显示网页内容的汉字,字符个数统计结果

时间: 2024-03-05 12:55:01 浏览: 20
好的,我可以帮你写一个Java程序,实现上述功能。但是需要说明的是,程序的界面可能不是很美观,因为我主要关注实现功能,而非界面设计。那么我们开始吧! 首先,你需要创建一个Java项目,并在项目中创建一个名为 `NotePad` 的类,代码如下: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; public class NotePad extends JFrame implements ActionListener { private JTextArea textArea; // 记事本文本框 private JTextField urlField; // 网址输入框 private JTextArea contentArea; // 网页内容显示框 private JTextArea countArea; // 统计结果显示框 public NotePad() { // 创建记事本菜单 JMenuBar menuBar = new JMenuBar(); JMenu menuFile = new JMenu("文件"); JMenuItem menuItemOpen = new JMenuItem("打开"); menuItemOpen.addActionListener(this); JMenuItem menuItemSave = new JMenuItem("保存"); menuItemSave.addActionListener(this); JMenuItem menuItemSaveAs = new JMenuItem("另存为"); menuItemSaveAs.addActionListener(this); menuFile.add(menuItemOpen); menuFile.add(menuItemSave); menuFile.add(menuItemSaveAs); menuBar.add(menuFile); setJMenuBar(menuBar); // 创建记事本文本框 textArea = new JTextArea(); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); JScrollPane scrollPane = new JScrollPane(textArea); add(scrollPane, BorderLayout.CENTER); // 创建网址输入框和查询、统计按钮 JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); urlField = new JTextField(); JButton searchButton = new JButton("查询"); searchButton.addActionListener(this); JButton countButton = new JButton("统计"); countButton.addActionListener(this); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(1, 2)); buttonPanel.add(searchButton); buttonPanel.add(countButton); panel.add(urlField, BorderLayout.NORTH); panel.add(buttonPanel, BorderLayout.CENTER); add(panel, BorderLayout.NORTH); // 创建网页内容显示框和统计结果显示框 JPanel contentPanel = new JPanel(); contentPanel.setLayout(new GridLayout(1, 2)); contentArea = new JTextArea(); contentArea.setLineWrap(true); contentArea.setWrapStyleWord(true); JScrollPane contentScrollPane = new JScrollPane(contentArea); countArea = new JTextArea(); countArea.setEditable(false); countArea.setLineWrap(true); countArea.setWrapStyleWord(true); JScrollPane countScrollPane = new JScrollPane(countArea); contentPanel.add(contentScrollPane); contentPanel.add(countScrollPane); add(contentPanel, BorderLayout.SOUTH); // 设置记事本窗口属性 setTitle("记事本"); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { switch (e.getActionCommand()) { case "打开": openFile(); break; case "保存": saveFile(); break; case "另存为": saveAsFile(); break; case "查询": search(); break; case "统计": count(); break; } } // 打开文件 private void openFile() { JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line; textArea.setText(""); while ((line = reader.readLine()) != null) { textArea.append(line + "\n"); } reader.close(); } catch (IOException ex) { ex.printStackTrace(); } } } // 保存文件 private void saveFile() { if (textArea.getText().isEmpty()) { JOptionPane.showMessageDialog(this, "文件内容为空,无法保存"); return; } JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(textArea.getText()); writer.close(); } catch (IOException ex) { ex.printStackTrace(); } } } // 另存为文件 private void saveAsFile() { if (textArea.getText().isEmpty()) { JOptionPane.showMessageDialog(this, "文件内容为空,无法保存"); return; } JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(textArea.getText()); writer.close(); } catch (IOException ex) { ex.printStackTrace(); } } } // 查询网页内容 private void search() { String url = urlField.getText(); if (url.isEmpty()) { JOptionPane.showMessageDialog(this, "请输入网址"); return; } try { URL u = new URL(url); BufferedReader reader = new BufferedReader(new InputStreamReader(u.openStream(), "UTF-8")); String line; contentArea.setText(""); while ((line = reader.readLine()) != null) { contentArea.append(line + "\n"); } reader.close(); } catch (IOException ex) { ex.printStackTrace(); } } // 统计汉字和字符个数 private void count() { String content = contentArea.getText(); if (content.isEmpty()) { JOptionPane.showMessageDialog(this, "网页内容为空,无法统计"); return; } int hanziCount = 0; int charCount = 0; for (int i = 0; i < content.length(); i++) { char c = content.charAt(i); if (isHanzi(c)) { hanziCount++; } if (!Character.isWhitespace(c)) { charCount++; } } countArea.setText("汉字个数:" + hanziCount + "\n" + "字符个数:" + charCount); } // 判断字符是否是汉字 private boolean isHanzi(char c) { Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]"); Matcher matcher = pattern.matcher(String.valueOf(c)); return matcher.matches(); } public static void main(String[] args) { new NotePad(); } } ``` 代码说明: 1. `NotePad` 类继承自 `JFrame` 类,并实现了 `ActionListener` 接口,用于监听菜单和按钮的点击事件。 2. `NotePad` 类中包含一个记事本文本框 (`textArea`) 和三个用于网页查询和统计的组件:网址输入框 (`urlField`)、网页内容显示框 (`contentArea`) 和统计结果显示框 (`countArea`)。 3. `NotePad` 类的构造方法中创建了记事本菜单和记事本文本框,并将它们添加到窗口中。 4. `NotePad` 类的构造方法中创建了网址输入框、查询按钮和统计按钮,并将它们添加到窗口中。 5. `NotePad` 类的构造方法中创建了网页内容显示框和统计结果显示框,并将它们添加到窗口中。 6. `NotePad` 类实现了 `actionPerformed` 方法,用于处理菜单和按钮的点击事件。具体实现如下: - 如果点击了“打开”菜单,则调用 `openFile` 方法打开文件。 - 如果点击了“保存”菜单,则调用 `saveFile` 方法保存文件。 - 如果点击了“另存为”菜单,则调用 `saveAsFile` 方法另存文件。 - 如果点击了“查询”按钮,则调用 `search` 方法查询网页内容。 - 如果点击了“统计”按钮,则调用 `count` 方法统计网页内容的汉字和字符个数。 7. `NotePad` 类中的 `openFile`、`saveFile` 和 `saveAsFile` 方法分别用于打开、保存和另存文件。具体实现如下: - `openFile` 方法会弹出一个文件选择对话框,选择要打开的文件后,将文件的内容读入记事本文本框中。 - `saveFile` 方法会弹出一个文件选择对话框,选择要保存的文件后,将记事本文本框中的内容写入文件中。 - `saveAsFile` 方法与 `saveFile` 方法类似,不同之处在于它始终弹出文件选择对话框,让用户选择文件路径。 8. `NotePad` 类中的 `search` 方法用于查询网页内容。具体实现如下: - 首先获取用户输入的网址。 - 然后根据网址创建一个 `URL` 对象,并使用 `openStream()` 方法打开该网页的输入流。 - 通过 `InputStreamReader` 类将输入流转换为字符流,并指定字符集为 UTF-8。 - 使用 `BufferedReader` 类读取字符流,并将读取到的内容显示在网页内容显示框中。 9. `NotePad` 类中的 `count` 方法用于统计网页内容的汉字和字符个数。具体实现如下: - 首先获取网页内容。 - 然后遍历网页内容,统计汉字和字符个数。 - 最后将统计结果显示在统计结果显示框中。 10. `NotePad` 类中的 `isHanzi` 方法用于判断一个字符是否是汉字。具体实现如下: - 使用正则表达式判断字符是否在 Unicode 编码范围 `\u4e00-\u9fa5` 内。 11. `NotePad` 类的 `main` 方法用于启动程序。

相关推荐

最新推荐

recommend-type

记事本的设计与功能实现 Java课程设计报告 源代码

主要用到的是图形界面,可以在文本编辑框里进行编辑,在菜单选项里进行打开、保存、另存为、查找、替换、等功能。界面上的按钮有文件、编辑、工具和帮助。还添加有工具条,工具条中有按钮复制、粘贴和全选。
recommend-type

JAVA记事本课程设计报告

(4)另存为功能 (5)退出功能 (三)编辑菜单 (1)撤销功能 (2)剪切功能 (3)复制功能 (4)粘贴功能 (5)删除功能 (6)查找功能 (7)替换功能 (8)全选功能 (9)显示当前时间/日期功能 (四)格式菜单 ...
recommend-type

前端Mock的使用,用于构造动态数据

适用于前端开发,前端构建动态数据
recommend-type

SQL语句的基本用法案例.pdf

“SQL语句的基本用法案例”的文档,是一份非常实用的学习资料,为初学者和进阶者提供了丰富的SQL操作示例。通过这份文档,读者可以系统地了解SQL语言在数据库管理中的应用,掌握从创建数据库到删除数据库的整个流程。 文档开篇便介绍了如何创建一个新的数据库,并详细说明了选择数据库、创建表以及插入数据的具体步骤。这不仅为读者展示了SQL语句的基础用法,也为后续的查询、更新和删除操作打下了坚实的基础。 在查询数据部分,文档通过多个示例展示了SQL查询的灵活性和强大功能。无论是查询所有学生信息,还是根据特定条件筛选数据,都能通过简单的SQL语句实现。此外,文档还介绍了如何计算学生的总数、平均年龄等统计信息,以及如何对数据进行排序和限制结果。 除了基础的增删改查操作,文档还深入介绍了子查询、连接表以及窗口函数等高级用法。这些功能在实际应用中非常常见,能够帮助用户解决更为复杂的数据处理问题。 此外,文档还提供了清晰的代码示例和注释,使得读者能够轻松理解每个步骤的含义和目的。同时,文档的语言简洁明了,逻辑清晰,使得学习过程更加轻松愉快。
recommend-type

node-v7.7.4-sunos-x86.tar.gz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章

![:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章](https://img-blog.csdnimg.cn/img_convert/69b98e1a619b1bb3c59cf98f4e397cd2.png) # 1. 目标检测算法概述 目标检测算法是一种计算机视觉技术,用于识别和定位图像或视频中的对象。它在各种应用中至关重要,例如自动驾驶、视频监控和医疗诊断。 目标检测算法通常分为两类:两阶段算法和单阶段算法。两阶段算法,如 R-CNN 和 Fast R-CNN,首先生成候选区域,然后对每个区域进行分类和边界框回归。单阶段算法,如 YOLO 和 SSD,一次性执行检
recommend-type

设计算法实现将单链表中数据逆置后输出。用C语言代码

如下所示: ```c #include <stdio.h> #include <stdlib.h> // 定义单链表节点结构体 struct node { int data; struct node *next; }; // 定义单链表逆置函数 struct node* reverse(struct node *head) { struct node *prev = NULL; struct node *curr = head; struct node *next; while (curr != NULL) { next
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。