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.流 流是一个连续的数据流,可以从流中读 ...
随机推荐
- js 时间戳精确值的问题
最近做一个多图上传的功能,通过name + 时间戳命名,结果发现时间戳竟然一样,一直以为是代码逻辑的问题,结果出错在时间戳的获取上了. 关于时间戳的获取方式: 1.Date.parse() var d ...
- id、NSObject *、id<NSObject>、instancetype
1. id 与 NSObject * (1) id 是 Objective-C 对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的 ...
- GPS格式标准
GPS接收机串行通信标准摘要 参考NMEA-0183 美国国家海洋电子协会(NMEA—The NationalMarine Electronics Association) 为了在不同的GPS导航设备 ...
- HDU1964 Pipes —— 插头DP
题目链接:https://vjudge.net/problem/HDU-1964 Pipes Time Limit: 5000/1000 MS (Java/Others) Memory Limi ...
- hdu 1541 Stars 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541 题目意思:有 N 颗星星,每颗星星都有各自的等级.给出每颗星星的坐标(x, y),它的等级由所有 ...
- Java泛型和反射总结
A a = (A)Class.forName(“pacage.A”).newInstance(); 这和你 A a = new A(): 是一样的效果. String className = “Exa ...
- BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS
BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N ...
- AJAX --- 一种创建交互式网页应用的网页开发技术
目录 AJAX 创建XHR实例 指定readyStatechange事件处理程序 启动请求 发送请求 接收数据 取消XHR请求/响应 AJAX ajax核心技术就是 XMLHttpRequest 对象 ...
- 初学者遇到的PostgreSQL字符集问题的解决
当初学者在使用PostgreSQL数据库,输入中文时,会遇到“ERROR: invalid byte sequence for encoding "UTF8": 0xd6d0”的 ...
- hibernate -- 分页模糊查询中setParameter 和setParameterList
在分页模糊查询中碰到setParameter 和setParameterList这两个方法 setParameter 以前就只会用setParameter(int arg,String str),我用 ...