javase实现记事本
java编程就是分布式、微服务?离开Spring...我还能写点什么
不知从何时起,自己喜欢上也习惯了用java写点界面程序、app。也许这就是程序员仅剩的一点乐趣。但对我而言。我却很享受这个过程。程序猿一枚,热爱着编程。闲暇时光,一杯咖啡,一首轻音乐,打开笔记本用一行行代码实现自己心中的想法,实属快事。
效果

代码
package example;
/**
* ┏┓ ┏┓
*┏┛┻━━━ ┻┓
*┃ ┃
*┃ ━ ┃
*┃ ┳┛ ┗┳ ┃
*┃ ┃
*┃ ┻ ┃
*┃ ┃
*┗━┓ ┏━┛
* ┃ ┃神兽保佑
* ┃ ┃代码无BUG!
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
*
*!!!!!!!!!!!!!!!!!!Get busy living or get busy dying!!!!!!!!!!!!!
*/
/**
* 记事本启动类
*
* @author www.javayihao.top
* @Time 2019
*/
public class App {
public static void main(String[] args) {
// 启动自定义窗口对象
EditorFrame editor = new EditorFrame();
}
}
package example;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.swing.ImageIcon;
import javax.swing.JButton;
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.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.text.DefaultStyledDocument;
/**
* java实现记事本程序主程序
*
* @author Administrator
*
*/
/*
* 自定义窗口类EditorFrame继承JFrame实现动作监听接口ActionListener
*/
public class EditorFrame extends JFrame implements ActionListener {
// 定义相关属性
private JMenuBar menuBar;// 頂部菜单栏
private JMenu menuFile, menuEdit, menuAbout;// 菜单文件、编辑、关于
// 菜单项新建、 打开、保存、退出、剪切、复制、粘贴、关于
private JMenuItem itemNewFile, itemOpen, itemSave, itemExit, itemCut, itemCopy, itemPaste, itemAbout;
private JToolBar toolBar;// 工具条
// 按钮新建、 打开、保存、退出、剪切、复制、粘贴、关于
private JButton butNewFile, butOpen, butSave, butExit, butCut, butCopy, butPaste, butAbout;
private JTextPane textPane;// 编辑窗口
private JLabel label;// 底部标签栏
private JFileChooser fileChooser;// 文件选择器
private JScrollPane scrollPane;
/*
* 构造方法
*/
public EditorFrame() {
// 实例化菜单栏
menuBar = new JMenuBar();
// 实例化菜单
menuFile = new JMenu("文件");
menuEdit = new JMenu("编辑");
menuAbout = new JMenu("关于");
// 实例化菜单项并添加事件监听
itemNewFile = new JMenuItem("新建");
itemNewFile.addActionListener(this);// 设置监听
itemNewFile.setActionCommand("newFile");
itemOpen = new JMenuItem("打开");
itemOpen.addActionListener(this);// 设置监听
itemOpen.setActionCommand("open");
itemSave = new JMenuItem("保存");
itemSave.addActionListener(this);// 设置监听
itemSave.setActionCommand("save");
itemExit = new JMenuItem("退出");
itemExit.addActionListener(this);// 设置监听
itemExit.setActionCommand("exit");
itemCut = new JMenuItem("剪切");
itemCut.addActionListener(this);// 设置监听
itemCut.setActionCommand("cut");
itemCopy = new JMenuItem("复制");
itemCopy.addActionListener(this);// 设置监听
itemCopy.setActionCommand("copy");
itemPaste = new JMenuItem("粘贴");
itemPaste.addActionListener(this);// 设置监听
itemPaste.setActionCommand("paste");
itemAbout = new JMenuItem("关于");
itemAbout.addActionListener(this);// 设置监听
itemAbout.setActionCommand("about");
// 文件设置菜单项
menuFile.add(itemNewFile);
menuFile.add(itemOpen);
menuFile.add(itemExit);
menuFile.add(itemSave);
// 编辑设置菜单项
menuEdit.add(itemCut);
menuEdit.add(itemCopy);
menuEdit.add(itemPaste);
// 关于设置菜单
menuAbout.add(itemAbout);
// 菜单栏设置菜单
menuBar.add(menuFile);
menuBar.add(menuEdit);
menuBar.add(menuAbout);
this.setJMenuBar(menuBar);
// 实例化工具条
toolBar = new JToolBar();
// 实例化按钮
butNewFile = new JButton("新建");
butNewFile.addActionListener(this);
butNewFile.setActionCommand("newFile");
butOpen = new JButton("打开");
butOpen.addActionListener(this);// 设置监听
butOpen.setActionCommand("open");
butSave = new JButton("保存");
butSave.addActionListener(this);// 设置监听
butSave.setActionCommand("save");
butExit = new JButton("退出");
butExit.addActionListener(this);// 设置监听
butExit.setActionCommand("exit");
butCut = new JButton("剪切");
butCut.addActionListener(this);// 设置监听
butCut.setActionCommand("cut");
butCopy = new JButton("复制");
butCopy.addActionListener(this);// 设置监听
butCopy.setActionCommand("copy");
butPaste = new JButton("粘贴");
butPaste.addActionListener(this);// 设置监听
butPaste.setActionCommand("paste");
butAbout = new JButton("关于");
butAbout.addActionListener(this);// 设置监听
butAbout.setActionCommand("about");
// 工具条设置按钮
toolBar.add(butNewFile);
toolBar.add(butOpen);
toolBar.add(butSave);
toolBar.add(butExit);
toolBar.add(butCut);
toolBar.add(butCopy);
toolBar.add(butPaste);
toolBar.add(butAbout);
// 实例化编辑窗口
textPane = new JTextPane();
label = new JLabel("www.javayihao.top ----by xiaoyuan");
// 实例化文件选择器
fileChooser = new JFileChooser();
// 实例化滚动条
scrollPane = new JScrollPane(textPane);
// 窗口容器中添加組件(使用边界布局)
Container container = getContentPane(); // 得到容器
container.add(toolBar, BorderLayout.NORTH); // 增加工具栏
container.add(scrollPane, BorderLayout.CENTER);
container.add(label, BorderLayout.SOUTH); // 增加状态栏
// 初始化窗口
this.setTitle("小猿记事本");// 窗口标题
this.setSize(600, 300);// 窗体大小
this.setIconImage((new ImageIcon("images/logo.png")).getImage());// 设置图标
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置可关闭进程
int width = Toolkit.getDefaultToolkit().getScreenSize().width;// 获得屏幕宽度
int height = Toolkit.getDefaultToolkit().getScreenSize().height;// 获得屏幕高度
this.setLocation((width - 500) / 2, (height - 400) / 2);// 剧中显示
this.setVisible(true);// 设置窗体可见
this.setResizable(true);// 可改变窗体大小
}
/*
* 事件方法
*/
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("newFile")) {
textPane.setDocument(new DefaultStyledDocument());// 清空文档
} else if (e.getActionCommand().equals("open")) {
int i = fileChooser.showOpenDialog(EditorFrame.this); // 显示打开文件对话框
if (i == JFileChooser.APPROVE_OPTION) { // 点击对话框中打开选项
File f = fileChooser.getSelectedFile(); // 得到选择的文件
try {
InputStream is = new FileInputStream(f); // 得到文件输入流
textPane.read(is, "d"); // 读入文件到文本窗格
} catch (Exception ex) {
ex.printStackTrace(); // 输出出错信息
}
}
} else if (e.getActionCommand().equals("save")) {
int i = fileChooser.showSaveDialog(EditorFrame.this); // 显示保存文件对话框
if (i == JFileChooser.APPROVE_OPTION) { // 点击对话框中保存按钮
File f = fileChooser.getSelectedFile(); // 得到选择的文件
try {
FileOutputStream out = new FileOutputStream(f); // 得到文件输出流
out.write(textPane.getText().getBytes()); // 写出文件
} catch (Exception ex) {
ex.printStackTrace(); // 输出出错信息
}
}
} else if (e.getActionCommand().equals("exit")) {
System.exit(0);
} else if (e.getActionCommand().equals("cut")) {
textPane.cut();// 調用文本剪切方法
} else if (e.getActionCommand().equals("copy")) {
textPane.copy();// 調用复制方法
} else if (e.getActionCommand().equals("paste")) {
textPane.paste();// 调用粘贴方法
} else if (e.getActionCommand().equals("about")) {
JOptionPane.showMessageDialog(EditorFrame.this, "www.javayihao.top---简单的文本编辑器演示");
}
}
}
嗯,差不多了,一个多小时了,写着玩玩挺舒服的,代码不足之处就是重复代码过多,本来打算自定一个事件数组,使用java8中的Stream流特性给组件以此添加事件,为了看着清楚就这样喽....
更多java实战项目 文章 关注微信公众号 java一号
javase实现记事本的更多相关文章
- javaSE基础之记事本编程
首先安装好jdk和jre,之后进行如下操作: 1. 将代码记事本---->cmd--->javac 文件名.java ----->java 文件名 如图: 2. 关于记事本文件属性的 ...
- JAVASE笔记回顾
第一部分,JAVA基础和面向对象 part01 入门与开发环境搭建 1: 计算机基础知识(了解)(1)计算机(2)计算机硬件(3)计算机软件系统软件:windows,linux,mac应用软件:QQ, ...
- javaSE第二十一天
第二十一天 276 1:字符流(掌握) 276 (1)字节流操作中文数据不是特别的方便,所以就出现了转换流. 276 (2)转换流其实是一个字符流 276 1:InputStr ...
- javaSE第二十天
第二十天 254 1:递归(理解) 254 (1)方法定义中调用方法本身的现象 254 (2)递归的注意事项 255 (3)递归的案例: 255 A:递归求阶乘 2 ...
- JavaSE之认识java
本来很早之前就应该总结自己在JavaSE中系统学到的知识了,马上就要出去工作了,想想自己还是非常菜的菜鸟,自己就夜不能寐呀.现在从zero基础开始带大家一起回顾学习的基础知识. 现在已经是凌晨了,但是 ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- 利用记事本和cmd进行java编程(从安装IDE--编译--运行)
java 最大特点---跨平台 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行.这是软件发展的趋势和编程人员追求的目标.之所以这样说,是因为计算机硬件的种类繁多 ...
- JavaSE综合项目演练
光阴似箭日月如梭,大家学习已经有了一段时间了,转眼间,从刚开始如何配置JDK已经到了现在快学完网络编程了.学了这么多,眼看就要进入下一个阶段了,数据库编程了,那么在进入下个阶段前,我们来完成一个综合性 ...
- 【黑马JavaSE】1.1JavaSE、环境变量、CMD使用、常量、变量、数据类型转换(自动/强制)、ASCII码表、Unicode万国码表
文章目录 SUN公司,詹姆斯.劳瑟琳,Java祖师爷 Java语言开发环境搭建 把Java添加到环境变量的方法 命令行CMD里一些报的错误 命令控制行常用操作的代码展示 Notepad++.注释.标识 ...
随机推荐
- JAVA的List接口的remove重载方法调用原理
前言 说真的,平常看源码都是自己看完自己懂,很少有写出来的冲动. 但是在写算法的时候,经常用到java中各种集合,其中也比较常用到remove方法. remove有重载函数,分别传入参数是索引inde ...
- Python3 学习笔记之 变量/字符串/if/while/逻辑运算符/模块引用
变量/if/while/逻辑运算符/模块引用: 变量: 使用变量前必须先赋值. 大小写区分. Python创建字符串,在字符串两边可以加上单引号或者双引号. 打印单引号或双引号,使用转移\ 使用\进行 ...
- 【流畅的python】16.1 - 生成器如何进化成协程
在生成器中加入yield关键字后,生成器调用方可以向生成器传入值,只需要使用.send(...)方法就可以传送数据.发送的数据会成为生成器函数中yield表达式的值.所以生成器可以作为协程使用. 协程 ...
- Fcitx使用搜狗词库与皮肤
在 \(\text{Linux}\) 环境下,\(\text{Fcitx}\) 确实是最好用的开源输入法之一.然而 \(\text{Windows}\) 下的巨头输入法 -- 搜狗,对 \(\text ...
- docker在Mac上的下载安装
在Mac上下载安装docker,下载链接:Stable 安装成功后启动终端,检查安装后的docker版本: yanguobindeMacBook-Pro:~ yanguobin$ docker --v ...
- SSH实现无密码登录
1.生成秘钥 : ssh-keygen -t rsa # -t 指定生成秘钥方式,生成秘钥过程需要三次回车 2.将生成的公钥传给 ssh 的对端 ssh-copy-id root@192.168.3. ...
- 虚拟机上安装centos8.0
一.准备宿主机 为了培训Hadoop生态的部署和调优技术,需要准备3台虚拟机部署Hadoop集群环境,能够保证HA,即主要服务没有单点故障,可执行基本功能,完成小内存模式的参数调整. 1.1.准备安装 ...
- Vue-CLI 项目在pycharm中配置
Vue-CLI Vue-CLI 项目在pycharm中配置 第一步 pycharm索引到vue项目的根目录,打开 第二步 安装vue.js插件来高亮 .vue 文件代码(见插图) 第三步 第四步 配置 ...
- Ubuntu18.04安装NVIDIA显卡驱动
1. 查看GPU型号 lspci | grep -i nvidia 我是 GeForce GTX 960M 2. NVIDIA官网下载驱动: https://www.nvidia.com/Downlo ...
- Hello World ! 节日快乐!
节日快乐! 世界你好,Hello World Java public class HelloWorld{ public static void main(String[] args) { System ...