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.流 流是一个连续的数据流,可以从流中读 ...
随机推荐
- vmware Ubuntu忘记登录密码
VMware Workstation 上的Ubuntu 11.10 登录时,用户密码忘记了,以下是我对此问题解决的方法: 1)重新启动Ubtuntu 16 系统,同时长时间按住(或连续点击)esc键进 ...
- linux 一个超简单的makefile
makefile 自动化变量: $@ : 规则的目标文件名 例如:main:main.o test.o g++ -Wall -g main.o test. ...
- FZU1977 Pandora adventure —— 插头DP
题目链接:https://vjudge.net/problem/FZU-1977 Problem 1977 Pandora adventure Accept: 597 Submit: 2199 ...
- HDU3374 String Problem —— 最小最大表示法 + 循环节
题目链接:https://vjudge.net/problem/HDU-3374 String Problem Time Limit: 2000/1000 MS (Java/Others) Me ...
- iOS--控制器加载自定义view的xib
我们在项目中,经常需要使用到自定义的view,而xib布局显得更为简洁,那么如何加载一个自定义的xib呢,网上的方法也很多很多,就是因为太多了,我经常会弄混,所以总结其中一个使用,如果以后使用到其他的 ...
- cf 620C Pearls in a Row(贪心)
d.有一串数字,要把这些数字分成若干连续的段,每段必须至少包含2个相同的数字,怎么分才能分的段数最多? 比如 是1 2 1 3 1 2 1 那么 答案是 21 34 7 即最多分在2段,第一段是1~3 ...
- damon
不管是否有-f参数,最终程序都会进入 fuse_loop_mt 循环中,在helper.c的fuse_main_common函数中. 1. 有-f参数.这种情况下fuse_setup_common函数 ...
- 一个小bug,关于fuse_mount_sys
在mount.c 中的 int fuse_mount_sys 函数中,如果注销掉 fd的open语句,此时fd一般为0. 然后,用普通用户运行ssfs且不加-f参数,一切显示正常 fuse_moun ...
- .NETFramework:Stopwatch
ylbtech-.NETFramework:Stopwatch 1.返回顶部 1. #region 程序集 System, Version=4.0.0.0, Culture=neutral, Publ ...
- MySQL主从详细安装步骤
网站: 程序在:web服务器192.168.1.100上面 数据库在:MySQL服务器192.168.1.123上面 实现目的:增加一台MySQL备份服务器(192.168.1.124),作为MySQ ...