JAVA 运用流编程实现简单的"记事本"功能
一、概要
1.功能介绍
2.实现的思路及步骤代码
3.完整代码
二、功能
运用IO流和Swing实现简单的记事本功能(打开、保存、退出)
三、思路及实现步骤
1.在构造函数中画出操作界面
//创建jta
jta = new JTextArea();
jmb = new JMenuBar();
jml = new JMenu("菜单(M)");
//设置助记符
jml.setMnemonic('M'); //打开按钮
jmi1 = new JMenuItem("打开", new ImageIcon("edit.gif"));
//添加图标的第二种方法
//ImageIcon ic = new ImageIcon("edit.gif");
//jmi1.setIcon(ic);
//保存按钮
jmi2 = new JMenuItem("保存");
//退出按钮
jmi3 = new JMenuItem("退出"); //放入控件
this.setJMenuBar(jmb);
//把JMenu放入到JMenuBar
jmb.add(jml);
//把item放入到Menu中去
jml.add(jmi1);
jml.add(jmi2);
jml.add(jmi3); //放入到JFrame里
this.add(jta);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 300);
this.setVisible(true);
界面展示:

2.注册监听事件(判断点了哪个按钮)
//进行注册监听
//打开
jmi1.addActionListener(this);
jmi1.setActionCommand("open");
//保存
jmi2.addActionListener(this);
jmi2.setActionCommand("save");
//退出
jmi3.addActionListener(this);
jmi3.setActionCommand("quit");
3.根据事件反馈判断要进行的操作(根据点击的按钮来判断要做什么事)
①打开
if (e.getActionCommand().equals("open")) {
//JFileChooser文件选择组件
JFileChooser jfc1 = new JFileChooser();
//设置名字
jfc1.setDialogTitle("请选择文件...");
jfc1.showOpenDialog(null);
//显示
jfc1.setVisible(true);
String file = null;
try {
//得到用户选择的文件绝对(全)路径
file = jfc1.getSelectedFile().getAbsolutePath();
//System.out.println(filename);
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
//从文件中读取信息并显示到jta
String s = "";
String allCon = "";
while ((s = br.readLine()) != null) {
allCon += s + "\r\n";
}
//放置到jta即可
jta.setText(allCon);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (br != null && fr != null) {
br.close();
fr.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
System.out.println("未选中文件");
//ex.printStackTrace();
}
}
②保存
if (e.getActionCommand().equals("save")) {
//出现保存对话框
JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("另存为...");
//按默认的方式显示
jfc.showSaveDialog(null);
jfc.setVisible(true);
String file = null;
try {
//得到用户希望把文件保存到的地址(文件绝对路径)
file = jfc.getSelectedFile().getAbsolutePath();
//写入到指定文件
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
bw.write(this.jta.getText());
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
//bw和fw的关闭顺序不能写反,否则会报错
if (bw != null && fw != null) {
bw.close();
fw.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
System.out.println("未选中文件");
//ex.printStackTrace();
//System.out.println(ex.getMessage());
}
}
③退出
if (e.getActionCommand().equals("quit")) {
System.exit(0);
}
四、附上完整代码
/**
* 我的记事本(界面+功能)
*/
package com.test3; import javax.swing.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter; public class NotePad extends JFrame implements ActionListener {
//定义需要的组件
JTextArea jta = null; //菜单条
JMenuBar jmb = null; //定义JMenu(菜单栏按钮)
JMenu jml = null; //定义JMenuItem(功能按钮)
JMenuItem jmi1 = null;
JMenuItem jmi2 = null;
JMenuItem jmi3 = null; public static void main(String[] args) {
NotePad notePad = new NotePad();
} //构造函数
public NotePad() {
//创建jta
jta = new JTextArea();
jmb = new JMenuBar();
jml = new JMenu("菜单(M)");
//设置助记符
jml.setMnemonic('M'); //打开按钮
jmi1 = new JMenuItem("打开", new ImageIcon("edit.gif"));
//添加图标的第二种方法
//ImageIcon ic = new ImageIcon("edit.gif");
//jmi1.setIcon(ic);
//保存按钮
jmi2 = new JMenuItem("保存");
//退出按钮
jmi3 = new JMenuItem("退出"); Listen(); //放入控件
this.setJMenuBar(jmb);
//把JMenu放入到JMenuBar
jmb.add(jml);
//把item放入到Menu中去
jml.add(jmi1);
jml.add(jmi2);
jml.add(jmi3); //放入到JFrame里
this.add(jta);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 300);
this.setVisible(true);
} //监听事件
public void Listen()
{
//进行注册监听
//打开
jmi1.addActionListener(this);
jmi1.setActionCommand("open");
//保存
jmi2.addActionListener(this);
jmi2.setActionCommand("save");
//退出
jmi3.addActionListener(this);
jmi3.setActionCommand("quit");
} @Override
public void actionPerformed(ActionEvent e) {
//判断触发了哪个功能按钮
//打开
if (e.getActionCommand().equals("open")) {
//JFileChooser文件选择组件
JFileChooser jfc1 = new JFileChooser();
//设置名字
jfc1.setDialogTitle("请选择文件..."); jfc1.showOpenDialog(null);
//显示
jfc1.setVisible(true); String file = null;
try {
//得到用户选择的文件绝对(全)路径
file = jfc1.getSelectedFile().getAbsolutePath(); //System.out.println(filename);
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
//从文件中读取信息并显示到jta
String s = "";
String allCon = "";
while ((s = br.readLine()) != null) {
allCon += s + "\r\n";
} //放置到jta即可
jta.setText(allCon); } catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (br != null && fr != null) {
br.close();
fr.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
System.out.println("未选中文件");
//ex.printStackTrace();
}
}
//保存
else if (e.getActionCommand().equals("save")) {
//出现保存对话框
JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("另存为...");
//按默认的方式显示
jfc.showSaveDialog(null);
jfc.setVisible(true); String file = null;
try {
//得到用户希望把文件保存到的地址(文件绝对路径)
file = jfc.getSelectedFile().getAbsolutePath(); //写入到指定文件
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(file);
bw = new BufferedWriter(fw); bw.write(this.jta.getText());
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
//bw和fw的关闭顺序不能写反,否则会报错
if (bw != null && fw != null) {
bw.close();
fw.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
System.out.println("未选中文件");
//ex.printStackTrace();
//System.out.println(ex.getMessage());
}
}
//退出
else if (e.getActionCommand().equals("quit")) {
System.exit(0);
}
}
}
JAVA 运用流编程实现简单的"记事本"功能的更多相关文章
- Java UDP网络编程 - 最简单示例
UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...
- Java利用TCP编程实现简单聊天室
前言: 本文是我在学习尚学堂JAVA300集第二季网络编程部分仿照视频内容实现而成 具体可以去尚学堂官网观看视频学习 一.实现思路 实现聊天室的最核心部分就是JAVA的TCP网络编程. TCP 传输控 ...
- JAVA IO流编程 实现文件的写入、写出以及拷贝
一.流的概念 流:数据在数据源(文件)和程序(内存)之间经历的路径. 输入流:数据从数据源(文件)到程序(内存)的路径. 输出流:数据从程序(内存)到数据源(文件)的路径. 以内存为参照,如果数据向内 ...
- Java中使用UDP实现简单的聊天功能
通过DatagramSocket类来实现.此类表示用来发送和接收数据报包的套接字. 发送端代码如下: import java.io.IOException; import java.net.*; im ...
- 【Android】12.6 利用Intent实现记事本功能(NotePad)
分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 这个例子演示如何实现一个简单的记事本功能. 该例子提前使用了后面章节将要介绍的SQLLite数据库. 二.示例-c ...
- Java标准I/O流编程一览笔录
I/O是什么 I/O 是Input/Output(输入.输出)的简称,输入流可以理解为向内存输入,输出流是从内存输出. 流 流是一个连续的数据流,可以从流中读取数据,也可以往流中写数据.流与数据源,或 ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- Java IO流简单使用
Java IO流简单使用 也许是以前IO方面接触的比较少,我对于读和写的概念老是混淆. 趁着现在实习比较闲小结一下,我个人理解读和写都是针对程序,分别就是程序的输入和输出,或者叫读入写出. Java ...
- Java 标准 IO 流编程一览笔录( 上 )
Java标准I/O知识体系图: 1.I/O是什么? I/O 是Input/Output(输入.输出)的简称,输入流可以理解为向内存输入,输出流是从内存输出. 2.流 流是一个连续的数据流,可以从流中读 ...
随机推荐
- Hive 自定义函数 UDF UDAF UDTF
1.UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /** * @function 自定义UDF统计最小值 * @author John * */ ...
- uCos临界区保护
定义有三种method,stm32f4采用的是第三种:将当前中断的状态标志保存在一个局部变量cpu_sr中,然后再关闭中断.cpu_sr是一个局部变量,存在于所有需要关中断的函数中.注意到,在使用了该 ...
- Vue实现仿淘宝商品详情属性选择的功能
Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下: attrA ...
- 量子纠缠1——量子比特、Bell态、EPR佯谬
量子纠缠是量子物理的基本性质,他描述的是:当几个粒子相互作用后,无法单独描述各个粒子的性质,只能整体描述,本文主要介绍两个量子比特之间的纠缠. 量子比特(Qubit) 量子比特是量子计算的基本单位,就 ...
- std::unique
类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素. 该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示无重复的值 ...
- 为什么linux有足够的内存还进行swap?
1.Linux在内存被用完之前开始交换.这是为了提高性能和响应能力: 性能提高是因为一些内存放磁盘缓存比方内存更合适.因此,最好将一个已经停用了一段时间的程序交换出去,而将经常使用的文件保存在缓存中. ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 22. 再讲Tag Helpers
深入的讲Tag Helpers 加载app下面的所有的文件夹以及各自文件夹下面所有的js文件. exclude是排除掉Services文件夹和其下面的子文件夹 使用cdn加载远程的js文件 找hidd ...
- E20180426-hm
transition n. 过渡,转变,变迁; [语] 转换; [乐] 变调 flip vt. 按(开关); 快速翻转; 急挥; n. 空翻; 浏览; (射击时枪管的) 跳跃; 轻抛; win ...
- E20180406-hm
dressing n. 穿衣; 调味品; 肥料 dress n. 衣服; 礼服; 连衣裙; 装饰; vt. 打扮; 穿着; 给…穿衣; monde n. 时髦社交界,上流社会; ingredient ...
- Mac下Apache服务器和webDav服务器快速配置
当自己在家敲代码需要发请求时,就可以配置本地Apache,Mac电脑自带的服务器.这个比windows上的本地服务器还要好用,下面写下最快速配置方案. 0.在开始之前需要给自己的电脑设置下开机密码,想 ...