当前位置: 首页 > news >正文

Java程序之简单“记事本”

要求:如下图所示,记事本具有新建、打开文本、保存、关闭等功能。

算法思路:

这是一个使用Java Swing库创建的简单文本编辑器。它包含一个菜单栏,其中包含“文件”菜单以及四个子菜单项:“新建”、“打开”、“保存”和“关闭”。用户可以在文本区域中输入和编辑文本,然后通过点击相应的菜单项来执行操作。

1. 创建一个名为Text的类,实现ActionListener接口。
2. 在Text类的构造方法中,初始化JFrame、JMenuBar、JMenu、JMenuItem、JTextArea、JFileChooser等组件,并设置它们的属性和事件监听器。
3. 在actionPerformed方法中,根据用户点击的菜单项执行相应的操作:
   - 如果点击了“新建”菜单项,则创建一个新的Text实例。
   - 如果点击了“打开”菜单项,则弹出文件选择对话框,让用户选择一个文件,然后将文件内容显示在文本区域中。
   - 如果点击了“保存”菜单项,则弹出文件选择对话框,让用户选择保存位置,然后将文本区域的内容保存到文件中。
   - 如果点击了“关闭”菜单项,则退出程序。

源代码:

Text.java

package Question10;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;public class Text implements ActionListener {private JFrame jFrame;private JMenuBar jMenuBar;private JMenu jMenu;private JMenuItem jMenuItemNew, jMenuItemOpen, jMenuItemSave, jMenuItemClose;private JTextArea jTextArea;private JFileChooser jFileChooser;private Font font;private JScrollPane jScrollPane;public Text() {jFrame = new JFrame("记事本");font=new Font("楷体",Font.PLAIN,15);jMenuBar = new JMenuBar();jMenu = new JMenu("文件");jMenu.setFont(font);jFrame.setJMenuBar(jMenuBar);jMenuBar.add(jMenu);jMenuItemNew = new JMenuItem("新建");jMenu.add(jMenuItemNew);jMenuItemNew.setFont(font);jMenuItemNew.addActionListener(this);jMenuItemOpen = new JMenuItem("打开");jMenu.add(jMenuItemOpen);jMenuItemOpen.setFont(font);jMenuItemOpen.addActionListener(this);jMenuItemSave = new JMenuItem("保存");jMenu.add(jMenuItemSave);jMenuItemSave.setFont(font);jMenuItemSave.addActionListener(this);jMenu.addSeparator();jMenuItemClose = new JMenuItem("关闭");jMenu.add(jMenuItemClose);jMenuItemClose.setFont(font);jMenuItemClose.addActionListener(this);jTextArea = new JTextArea();jFrame.add(jTextArea);jScrollPane =new JScrollPane(jTextArea);jFrame.add(jScrollPane);jFileChooser = new JFileChooser();jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jFrame.setSize(new Dimension(500, 500));jFrame.setLocation(new Point(400, 90));jFrame.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {Object object = e.getSource();if (object == jMenuItemNew) {new Text();} else if (object == jMenuItemOpen) {jFileChooser.showOpenDialog(null);File file = jFileChooser.getSelectedFile();try {InputStream inputStream = new FileInputStream(file);byte[] bt = new byte[inputStream.available()];inputStream.read(bt);jTextArea.setText(new String(bt));inputStream.close();} catch (FileNotFoundException ex) {ex.printStackTrace();} catch (IOException ex) {throw new RuntimeException(ex);}}else if(object==jMenuItemSave){jFileChooser.showSaveDialog(null);File file = jFileChooser.getSelectedFile();try {FileWriter fileWriter = new FileWriter(file);fileWriter.write(jTextArea.getText());fileWriter.close();} catch (IOException ex) {ex.printStackTrace();}}else if(object==jMenuItemClose){System.exit(1);}}
}

JiShiBen.java 

package Question10;public class JiShiBen {public static void main(String[] args) {new Text();}
}

运行结果: 

相关文章:

  • 【感悟】世界著名五大学习法
  • C# OpenCvSharp 图像处理函数-颜色通道-cvtColor
  • ViT:5 Knowledge Distillation
  • ADB获取当前正在显示的Activity和Fragment
  • 使用 select 进行 UART 通信的注意事项
  • godot所有2D节点介绍
  • 【C语言】--- 常见调试信息预处理器宏
  • 全面解析:C# 委托的实质性应用与优势
  • windows11子系统Ubuntu 22.04.4子安装图形化界面
  • 在Linux中如何解决程序崩溃的问题
  • linux高级编程(1)
  • 华为Atlas NPU ffmpeg 编译安装
  • cuda与cudnn下载(tensorflow-gpu)
  • 爬虫经典案例之爬取豆瓣电影Top250(方法一)
  • 学习前台开发主要掌握的技能
  • 4个实用的微服务测试策略
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angular2开发踩坑系列-生产环境编译
  • canvas 五子棋游戏
  • ES6语法详解(一)
  • If…else
  • Java精华积累:初学者都应该搞懂的问题
  • Magento 1.x 中文订单打印乱码
  • Promise初体验
  • Python打包系统简单入门
  • QQ浏览器x5内核的兼容性问题
  • spring security oauth2 password授权模式
  • yii2中session跨域名的问题
  • 说说动画卡顿的解决方案
  • 我的面试准备过程--容器(更新中)
  • 以太坊客户端Geth命令参数详解
  • 硬币翻转问题,区间操作
  • 怎么把视频里的音乐提取出来
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​flutter 代码混淆
  • ​Linux·i2c驱动架构​
  • ​Redis 实现计数器和限速器的
  • ​第20课 在Android Native开发中加入新的C++类
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Java入门)学生管理系统
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四)汇编语言——简单程序
  • (转)平衡树
  • .NET CLR Hosting 简介
  • .net core Swagger 过滤部分Api
  • .Net Core与存储过程(一)
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET Project Open Day(2011.11.13)
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET导入Excel数据
  • .NET与 java通用的3DES加密解密方法