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实现记事本的更多相关文章

  1. javaSE基础之记事本编程

    首先安装好jdk和jre,之后进行如下操作: 1. 将代码记事本---->cmd--->javac 文件名.java ----->java 文件名 如图: 2. 关于记事本文件属性的 ...

  2. JAVASE笔记回顾

    第一部分,JAVA基础和面向对象 part01 入门与开发环境搭建 1: 计算机基础知识(了解)(1)计算机(2)计算机硬件(3)计算机软件系统软件:windows,linux,mac应用软件:QQ, ...

  3. javaSE第二十一天

    第二十一天    276 1:字符流(掌握)    276 (1)字节流操作中文数据不是特别的方便,所以就出现了转换流.    276 (2)转换流其实是一个字符流    276 1:InputStr ...

  4. javaSE第二十天

    第二十天    254 1:递归(理解)    254 (1)方法定义中调用方法本身的现象    254 (2)递归的注意事项    255 (3)递归的案例:    255 A:递归求阶乘    2 ...

  5. JavaSE之认识java

    本来很早之前就应该总结自己在JavaSE中系统学到的知识了,马上就要出去工作了,想想自己还是非常菜的菜鸟,自己就夜不能寐呀.现在从zero基础开始带大家一起回顾学习的基础知识. 现在已经是凌晨了,但是 ...

  6. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...

  7. 利用记事本和cmd进行java编程(从安装IDE--编译--运行)

    java 最大特点---跨平台 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行.这是软件发展的趋势和编程人员追求的目标.之所以这样说,是因为计算机硬件的种类繁多 ...

  8. JavaSE综合项目演练

    光阴似箭日月如梭,大家学习已经有了一段时间了,转眼间,从刚开始如何配置JDK已经到了现在快学完网络编程了.学了这么多,眼看就要进入下一个阶段了,数据库编程了,那么在进入下个阶段前,我们来完成一个综合性 ...

  9. 【黑马JavaSE】1.1JavaSE、环境变量、CMD使用、常量、变量、数据类型转换(自动/强制)、ASCII码表、Unicode万国码表

    文章目录 SUN公司,詹姆斯.劳瑟琳,Java祖师爷 Java语言开发环境搭建 把Java添加到环境变量的方法 命令行CMD里一些报的错误 命令控制行常用操作的代码展示 Notepad++.注释.标识 ...

随机推荐

  1. bootstrap具体知识点(2)

    3.以移动设备为优先 <meta name=”viewport” content=”width=device-width,initial-scale=1,user-scalable=no”> ...

  2. [Machine learning] Logistic regression

    1. Variable definitions m : training examples' count \(X\) : design matrix. each row of \(X\) is a t ...

  3. 13.Django基础之django分页

    一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views ...

  4. JavaSE----03.数据类型

    03.数据类型 1.数据类型分类     Java是强类型语言,Java中的数据类型分为两大类,分别是基本数据类型和引用数据类型.其中,基本数据类型由Java语言定义,其数据占用内存的大小固定,在内存 ...

  5. [以太坊源代码分析] I.区块和交易,合约和虚拟机

    最近在看以太坊(Ethereum)的源代码, 初初看出点眉目. 区块链是近年热点之一,面向大众读者介绍概念的文章无数,有兴趣的朋友可自行搜索.我会从源代码实现入手,较系统的介绍一下以太坊的系统设计和协 ...

  6. pycharm 2019/10 激活码 最新福利 (1)

    MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...

  7. 扛住阿里双十一高并发流量,Sentinel是怎么做到的?

    Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能.原理.架构.快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系 ...

  8. 富文编辑器和bs4简单实用

    目录 使用方法 官方网址 图片上传下载实例 菜单栏功能筛选 bs4 导入 提取标签内的文本内容 目录 使用方法 直接给输入框绑定事件即可,注意引入js方式有点不一样,多加编码方式 <script ...

  9. C# MQTT mqtt客户端,发布订阅消息

    如果想用C#来和mqtt的服务器进行数据交互的话,有一个常见的选择,那就是 MQTTNET 地址如下:https://github.com/chkr1011/MQTTnet 那个库在最近几个版本升级的 ...

  10. vue-cli中使用jquery

    一.安装依赖 npm install jquery --save 二.全局导入(必须先安装依赖) 第一步 在webpack.base.conf.js里加入(新版的可能找不到这个文件,你可以npm in ...