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. SpringBoot 定时任务实现方式

    定时任务实现的几种方式: Timer:是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但 ...

  2. Shell之操作环境

    目录 Shell之操作环境 参考 命令运行顺序 欢迎信息 环境配置 Shell之操作环境

  3. php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串

    $str="你好<我>(爱)[北京]{天安门}"; echo f1($str); //返回你好 echo f2($str); //返回我 echo f3($str); ...

  4. 地图的标注Marker

    (1)在point处添加标注:var marker = new BMap.Marker(point); (2)添加覆盖物:map.addOverlay(marker); (3)激活标注的拖拽功能:ma ...

  5. Springboot之初入江湖

    Hello,各位小伙伴大家好,我是小栈君. 今天的分享主题是关于Springboot主题分享,其实在写这个系列主题之前有想过一些关于分享技术的顺序问题,因为我在创建"IT干货栈"这 ...

  6. SpringBoot系列:Spring Boot使用模板引擎JSP

    一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...

  7. MIPI CSI2-TX接口基于FPGA实现

    MIPI CSI2-TX用途: 跟海思的3559A芯片进行图像数据传输: MIPI CSI2-TX接口特性: xilinx 7系列芯片最大支持1.25Gbps: 最大支持lanes数量为4: 支持的图 ...

  8. 阿里云服务器ecs + tomcat + 域名解析 部署web页面

    1.购买ecs:https://www.aliyun.com/product/ecs?spm=5176.12825654.eofdhaal5.2.3bf92c4aYOB7gL&aly_as=A ...

  9. mpvue 页面预加载,新增preLoad生命周期

    存在的必要性:mpvue开发微信小程序,在页面跳转到新页面的过程中会有200ms左右的延迟,这个200ms如果用来请求新页面的接口,那么跳转到新页面或许已经渲染好了页面. 就是两种方式: 1.新页面跳 ...

  10. pycharm 安装第三方包步骤

    pycharm 安装第三方包步骤: 完成.