javaGUI编程、事件监听、JFileChooser组件相关知识
/**
* 功能:记事本
* 日期:2017.2.13
*/
package com.testFile;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;
public class Txt extends JFrame implements ActionListener{
//定义需要的组件
JTextArea jta=null;
//菜单条
JMenuBar jmb=null;
//第一JMenu
JMenu jm1;
//菜单下的目录
JMenuItem jmi1,jmi2,jmi3;
//文件路径
String filename;
public static void main(String[] args) {
// TODO Auto-generated method stub
Txt t=new Txt();
}
//构造函数
public Txt()
{
//创建jta,文本空间
jta=new JTextArea();
//菜单条
jmb=new JMenuBar();
//第一JMenu
jm1=new JMenu("文件(F)");
jm1.setMnemonic('f');
//菜单下的目录
jmi1=new JMenuItem("打开");
//注册监听(事件监听者为本类)
jmi1.addActionListener(this);
//设置此组件激发的操作事件的名称
jmi1.setActionCommand("open");
jmi2=new JMenuItem("保存");
//注册监听
jmi2.addActionListener(this);
//设置此组件激发的操作事件的名称
jmi2.setActionCommand("save");
jmi3=new JMenuItem("另存为");
//注册监听
jmi3.addActionListener(this);
//设置此组件激发的操作事件的名称
jmi3.setActionCommand("save as");
//添加组件
//输入面板
this.add(jta);
//添加菜单条
this.setJMenuBar(jmb);
//添加第一个菜单
jmb.add(jm1);
//添加菜单下拉
jm1.add(jmi1);
jm1.add(jmi2);
jm1.add(jmi3);
this.setTitle("记事本");
this.setSize(600, 450);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//判断是哪个菜单被选中
if(e.getActionCommand().equals("open"))
{
// System.out.println("open");
/**
* 隆重给大家推荐JFileChooser组件
*
*/
//文件选择组件
JFileChooser jfc1=new JFileChooser();
//设置名字
jfc1.setDialogTitle("请选择文件.....");
//默认方式
jfc1.showOpenDialog(null);
//显示
jfc1.setVisible(true);
//的到用户选择的路径
filename=jfc1.getSelectedFile().getAbsolutePath();
//读取文件并显示
FileReader fr=null;
BufferedReader br=null;
try {
fr=new FileReader(filename);
br=new BufferedReader(fr);
//逐行读取到的字符串
String s="";
//最后的字符串
String allcon="";
//循环读取,读完则为空
while((s=br.readLine())!=null)
{
allcon+=s+"\r\n";
}
//将读取到的字符串显示在JTextArea
jta.setText(allcon);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally
{
try {
fr.close();
br.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
else if(e.getActionCommand().equals("save"))
{
//如果按下的是保存按钮
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw=new FileWriter(filename);
bw=new BufferedWriter(fw);
//需要保存的字符
String lastcon=jta.getText();
//System.out.println(lastcon);
bw.write(lastcon);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally
{
try {
//刷新该流的缓冲
fw.flush();
bw.flush();
fw.close();
bw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
else if(e.getActionCommand().equals("save as"))
{
//如果按下的键是另存为
//文件选择组件
JFileChooser jfc2=new JFileChooser();
//设置标题
jfc2.setDialogTitle("另存为...");
//默认方式
jfc2.showSaveDialog(null);
//显示
jfc2.setVisible(true);
//获得保存路径
String file=jfc2.getSelectedFile().getAbsolutePath();
//保存文件
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw=new FileWriter(file);
bw=new BufferedWriter(fw);
bw.write(this.jta.getText());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally
{
try {
//刷新该流的缓冲。
fw.flush();
bw.flush();
//关闭该流前先刷新该流的缓存,否则就会抛出异常
fw.close();
bw.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}