Java实现记事本|IO流/GUI
Java实现记事本
题目
利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上;
允许对文字内容进行编辑,并可以保存到文件。
代码
package notePadExp;
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
class notPadcontainer{
public Boolean visible = false;
//组件定义成属性
public JFrame notPadFrame;
public JMenuBar notPadMenuBar;
public JMenu firMenu;
public JMenu secMenu;
public JMenu thirMenu;
public JMenu fourMenu;
public JMenuItem buildItem;
public JMenuItem openItem;
public JMenuItem reserveItem;
public JMenuItem paperSetItem;
public JMenuItem clearItem;
public JMenuItem aboutItem;
public JMenuItem fontItem20;
public JMenuItem fontItem40;
public JTextArea textArea;
public JScrollPane textScrollPane;
/*
* 无参构造函数
* 创建组件 初始化组件
*/
notPadcontainer(){
//窗体Frame
this.notPadFrame = new JFrame("notePad by fishers"); //设置窗体 名字为notePad
this.notPadFrame.setLayout(new BorderLayout()); //边界布局方式
this.notPadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭框
this.notPadFrame.setSize(500,500); //设置窗口大小
//菜单组件
this.notPadMenuBar = new JMenuBar();
this.firMenu = new JMenu("文件");
this.thirMenu = new JMenu("字体");
this.secMenu = new JMenu("编辑");
this.fourMenu = new JMenu("帮助");
//create JMenuItem for the First menu
this.buildItem = new JMenuItem("新建");
this.openItem = new JMenuItem("打开");
this.reserveItem = new JMenuItem("保存");
this.paperSetItem = new JMenuItem("页面设置");
//create JMenuItem for the sec thir four menu
this.clearItem = new JMenuItem("清空");
this.aboutItem = new JMenuItem("关于");
this.fontItem20 = new JMenuItem("字体20号");
this.fontItem40 = new JMenuItem("字体40号");
//文本组件
this.textArea = new JTextArea();
this.textScrollPane = new JScrollPane(textArea);
textArea.setFont(new Font("宋体",Font.PLAIN,20)); //默认20号字体
ItemAdd();
runListener();
}
//添加组件
public void ItemAdd(){
//添加JMenu到JMenuBar
notPadMenuBar.add(firMenu);
notPadMenuBar.add(secMenu);
notPadMenuBar.add(thirMenu);
notPadMenuBar.add(fourMenu);
//添加JMenuItem到第一个菜单
firMenu.add(buildItem);
firMenu.add(openItem);
firMenu.add(reserveItem);
firMenu.add(paperSetItem);
secMenu.add(clearItem);
thirMenu.add(fontItem20);
thirMenu.add(fontItem40);
fourMenu.add(aboutItem);
//notPadFrame中添加各个组件
this.notPadFrame.setJMenuBar(notPadMenuBar);
this.notPadFrame.add(textScrollPane,BorderLayout.CENTER);
}
/*
* 事件监听代码部分
*/
public void runListener() {
//新建文件 = 清空。。
buildItem.addActionListener( e -> {
textArea.setText("");
});
//打开文件
openItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//设置弹出框 FileDialog
FileDialog saveFiledialog = new FileDialog(notPadFrame,"打开文件",FileDialog.LOAD);
saveFiledialog.setVisible(true);
String fileDir = saveFiledialog.getDirectory(); //拿到目录
String fileName = saveFiledialog.getFile(); //拿到文件名
// System.out.println(fileDir);
// System.out.println(fileName);
File openFile = new File(fileDir,fileName); //使用File类创建新文件对象
try {
FileReader freader = new FileReader(openFile); //字符流
StringBuffer tempBuffer = new StringBuffer();//StringBuffer可变
int len = 0; //下面使用read方法读取
while((len = freader.read()) != -1) {
tempBuffer.append((char)len); //append方法加入StringBuffer
}
String openString = new String(tempBuffer.toString());
textArea.setText(openString);
freader.close();//关闭流
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
//保存文件
reserveItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
FileDialog saveFiledialog = new FileDialog(notPadFrame,"保存文件",FileDialog.SAVE);//父级frame 标题 mode
saveFiledialog.setVisible(true);
String fileDir = saveFiledialog.getDirectory();
String fileName = saveFiledialog.getFile();
System.out.println(fileDir);
System.out.println(fileName);
String ContentString = textArea.getText();
File saveFile = new File(fileDir,fileName);
try {
FileWriter fWriter = new FileWriter(saveFile); //使用字符流写文件
fWriter.write(ContentString); //写文件
fWriter.close(); //关闭流
}catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
//清空文件
clearItem.addActionListener( e -> {
textArea.setText("");
});
//监听关于
aboutItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFrame aboutFrame = new JFrame("关于"); //新建窗口
aboutFrame.setLayout(new BorderLayout());
aboutFrame.setSize(300,115);
aboutFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//设置隐藏窗口
JPanel panel = new JPanel();
JLabel label = new JLabel("不会换行、中文乱码的记事本");
JPanel panel2 = new JPanel();
JLabel label2 = new JLabel("Copyright © 2019 fishers");
panel.add(label);
panel2.add(label2);
aboutFrame.add(panel,BorderLayout.CENTER);
aboutFrame.add(panel2,BorderLayout.PAGE_START);
aboutFrame.setVisible(true);
}
});
fontItem20.addActionListener(e->{
textArea.setFont(new Font("宋体",Font.PLAIN,20));
});
fontItem40.addActionListener(e->{
textArea.setFont(new Font("宋体",Font.PLAIN,40));
});
}
//setVisible:设置窗口显示
public void setVisible(Boolean visible) {
this.visible = visible;
this.notPadFrame.setVisible(this.visible);
}
}
public class notePad {
public static void main(String[] args) {
notPadcontainer oneNote = new notPadcontainer();
oneNote.setVisible(true);
}
}
Java实现记事本|IO流/GUI的更多相关文章
- java中的IO流
Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...
- 第55节:Java当中的IO流-时间api(下)-上
Java当中的IO流(下)-上 日期和时间 日期类:java.util.Date 系统时间: long time = System.currentTimeMillis(); public class ...
- 第54节:Java当中的IO流(中)
Java当中的IO流(中) 删除目录 // 简书作者:达叔小生 import java.io.File; public class Demo{ public static void main(Stri ...
- 第53节:Java当中的IO流(上)
Java当中的IO流 在Java中,字符串string可以用来操作文本数据内容,字符串缓冲区是什么呢?其实就是个容器,也是用来存储很多的数据类型的字符串,基本数据类型包装类的出现可以用来解决字符串和基 ...
- Java中的IO流总结
Java中的IO流总结 1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和Buffe ...
- Java中的IO流大体介绍
由于Java中的IO流是在是知识点繁多,所以我大约花了1周的时间将其整理起来.但是整理起来后并不是将完事了,我还是要分字节流和字符流来讲述.然后字节流和字符流中还有是否带有缓冲流. 讲述完IO流后我将 ...
- Java中的IO流,Input和Output的用法,字节流和字符流的区别
Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...
- Java中的IO流(五)
上一篇<Java中的IO流(四)>记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream ...
- Java中的IO流(六)
上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...
随机推荐
- 使用 vs code 创建 Django 项目
操作流程: 1.前期准备工作 2.vs code配置Python环境 3.新建 Django 项目 4.vs code 配置 Debug Django 环境 5.浏览器查看效果 1.前期准备工作 安装 ...
- Linux第一章-目录初识
一.Linux基本介绍: Linux 是一种自由和开放源码的类 UNIX 操作系统,使用 Linux 内核.目前存在着许多不同的 Linux 发行版,可安装在各种各样的电脑硬件设备,从手机.平板电脑. ...
- [内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析【转】
转自:https://www.cnblogs.com/x_wukong/p/8573602.html 转自;https://www.cnblogs.com/aaronLinux/p/5890924.h ...
- scipy中的coo_matrix函数
推荐直接看官方文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.coo_matrix.html#scipy.sp ...
- myeclipse 9.0 破解方法,亲测可用
MyEclipse 9.0的破解方法,步骤如下: 1.破解公钥,确保MyEclipse没有开启,否则失败! 用WinRAR打开Common\plugins\com.genuitec.eclipse.c ...
- AcWing 799. 最长连续不重复子序列
网址 https://www.acwing.com/solution/AcWing/content/2069/ 题目描述给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长 ...
- AcWing 800. 数组元素的目标和
网址 https://www.acwing.com/solution/AcWing/content/2064/ 题目描述给定两个升序排序的有序数组A和B,以及一个目标值x,请你求出满足A[i] + B ...
- poj 3070 矩阵计算Fibonacci
地址 http://poj.org/problem?id=3070 大意是输入一个数字 输出位于Fibonacci数列该位置的数字模10000的结果 由于n比较大 0 ≤ n ≤ 1,000,000, ...
- java异常处理机制详解
java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...
- 小程序-引用的两种方式:import和include
import import可以在该文件中使用目标文件定义的template,如: 在mine.wxml中定义了一个叫item的template: <template name="ite ...