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. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(协程池版)

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from gevent import monkey monkey.patch_all() from gevent.pool i ...

  2. Python简单的抓取静态网页内容

    import requests from bs4 import BeautifulSoup res = requests.get('http://news.sina.com.cn/china/')#获 ...

  3. Case1-basic network framework/Related organization‘s name

    常见的计算机网络物理拓扑结构: 1.星型网 2.树型网 3.分布式网络 4.总线型网 5.环型网 6.复合型网络 计算机网络相关的标准化组织: 国际标准化组织(ISO):International O ...

  4. 简单动态字符串(SDS)

    SDS 前提:在redis中,C字符串只会作为字符串字面量用在一些无须对字符串进行修改的地方,比如打印日志: redisLog(REDIS_WARNING, “Redis is ready to ex ...

  5. JavaScript系列:函数式编程(开篇)

    前言: 上一篇介绍了 函数回调,高阶函数以及函数柯里化等高级函数应用,同时,因为正在学习JavaScript·函数式编程,想整理一下函数式编程中,对于我们日常比较有用的部分. 为什么函数式编程很重要? ...

  6. 从零开始入门 K8s | 可观测性:你的应用健康吗?

    作者 | 莫源 阿里巴巴技术专家 一.需求来源 首先来看一下,整个需求的来源:当把应用迁移到 Kubernetes 之后,要如何去保障应用的健康与稳定呢?其实很简单,可以从两个方面来进行增强: 首先是 ...

  7. pycharm 激活码 2019/11最新福利(2)

    812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlT ...

  8. 用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好

    网易商品评论爬取 分析网页 评论分析 进入到网易精选官网,搜索“文胸”后,先随便点进一个商品. 在商品页面,打开 Chrome 的控制台,切换至 Network 页,再把商品页Python入门到精通学 ...

  9. 服务器端 SOCKET 编程

    使用 Socket 的程序在使用 Socket 之前必须调用 WSAStartup() 函数, 此函数在应用程序中用来初始化 Windows Socket DLL, 只有此函数调用成功后,应用程序才可 ...

  10. XSS扫盲到漏洞挖掘上手

    复习xss ,也总结一下XSS基础的点到进阶的知识  目录 0x01 XSS扫盲入门 0x02 XSS payload构造 0x03 XSS payload变形进阶   0x01 XSS扫盲入门 XS ...