package com.guiAWT;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/***
* java.awt: 自定义的简单记事本
* @author caojsvm
*
*/
public class MyJavaNotepad {
private final String frameName = "MyFrame";
private Frame f;
private TextArea ta;
private MenuBar menuBar;
private Menu menu;
private MenuItem menuItemExit;
private MenuItem menuItemOpen,menuItemSave,menuItemSaveAs;
private FileDialog openDg,saveDg;
private File file;
public MyJavaNotepad() {
//初始化
init();
}
//初始化参数
private void init() {
this.f = new Frame(frameName);
/*************对Frame进行基本设置****************/
//设置位置坐标、窗口大小: void setBounds(int x, int y, int width, int height)
this.f.setBounds(600, 100, 800, 900);
//使用默认布局管理器,不做更改
//初始化TextArea文本区域
ta = new TextArea(50,100);
//初始化菜单栏
menuBar = new MenuBar();
//初始化菜单
menu = new Menu("File");
//初始化二级菜单
menuItemOpen = new MenuItem("open file...");
menuItemExit = new MenuItem("exit");
menuItemSave = new MenuItem("save file");
menuItemSaveAs = new MenuItem("save as...");
//建立关系
//添加二级菜单
menu.add(menuItemOpen);
menu.add(menuItemSave);
menu.add(menuItemSaveAs);
menu.add(menuItemExit);
//添加菜单
menuBar.add(menu);
//窗体中添加菜单栏
this.f.setMenuBar(menuBar);
//添加组件
this.f.add(ta);
//加载窗体及组件的事件
frameEvent();
//显示窗口
this.f.setVisible(true);
}
/***
* 给窗体和组件添加事件
*/
private void frameEvent() {
//给窗体添加事件
//查阅Frame类的父类Window的方法找到添加监听方法
//查阅WindowListener监听API发现,这个接口有很多方法,所以找其适配器(实现类)WindowAdapter。
//一般接口超过3个方法,都会有对应的适配器。
this.f.addWindowListener(
new WindowAdapter() {
//关闭窗口
public void windowClosing(WindowEvent e) {
System.out.println("关闭窗口");
System.exit(0);
}
}
);
//菜单事件
this.menuItemExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("点击菜单---exit...关闭窗口退出程序");
System.exit(0);
}
});
//菜单打开文件事件
this.menuItemOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("点击菜单---open...打开文件");
//加载打开文本框
openFileDialogInit();
//显示打开文件框
openDg.setVisible(true);
//把FileDialog中选中的文件显示在TextArea文本区域中
openFile();
}
});
//菜单保存文件事件
this.menuItemSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("点击菜单---save...保存文件");
saveFileDialogInit();
saveFile();
}
});
//菜单另存文件事件
this.menuItemSaveAs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("点击菜单---save as...保存文件");
saveFileDialogInit();
saveAsFile();
}
});
}
/**
* 初始化文件对话框
* public FileDialog(Frame parent,String title,int mode)
* 参数:
* parent - 对话框的所有者
* title - 对话框的标题
* mode - 对话框的模式,可以是 FileDialog.LOAD 或 FileDialog.SAVE
*/
private void openFileDialogInit(){
openDg = new FileDialog(this.f, "open File...");
}
/**
* 初始化文件对话框
*/
private void saveFileDialogInit(){
saveDg = new FileDialog(this.f, "save File...",FileDialog.SAVE);
}
/**
* 把打开的文件显示在文本区域中
*/
private void openFile(){
//获取文件路径
String dir = openDg.getDirectory();
//System.out.println(dir);
//获取文件名
String fileName = openDg.getFile();
//System.out.println(fileName);
//由于点取消时,目录或文件名可能为空,会导致后面创建File对象时出现异常
//因此要在这里做判断
if(dir == null || fileName == null){
return ;
}
//读取文件
file = new File(dir,fileName);
//System.out.println(file);
BufferedReader buffr = null;
try {
//先清空一下文本区域,防止每次打开文件都追加到上次文件的后面
this.ta.setText("");
buffr = new BufferedReader(new FileReader(file));
String str = null;
while((str = buffr.readLine()) != null){
this.ta.append(str+"\r\n");
}
//回显目录
this.f.setTitle(frameName+" : "+file.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(buffr != null){
buffr.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
/**
* 把文本区域中的内容保存到所选文件中
*/
private void saveFile(){
System.out.println("file="+file);
if(file == null){
saveDg.setVisible(true);
//获取文件路径
String dir = saveDg.getDirectory();
//System.out.println(dir);
//获取文件名
String fileName = saveDg.getFile();
//System.out.println(fileName);
//由于点取消时,目录或文件名可能为空,会导致后面创建File对象时出现异常
//因此要在这里做判断
if(dir == null || fileName == null){
return ;
}
//读取文件
file = new File(dir,fileName);
}
//System.out.println(file);
BufferedWriter buffw = null;
try {
String str = this.ta.getText();
buffw = new BufferedWriter(new FileWriter(file));
buffw.write(str);
buffw.flush();
System.out.println("保存文件成功");
//回显目录
this.f.setTitle(frameName+" : "+file.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(buffw != null){
buffw.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
/**
* 把文本区域中的内容另存到所选文件中
*/
private void saveAsFile(){
saveDg.setVisible(true);
//获取文件路径
String dir = saveDg.getDirectory();
//System.out.println(dir);
//获取文件名
String fileName = saveDg.getFile();
//System.out.println(fileName);
//由于点取消时,目录或文件名可能为空,会导致后面创建File对象时出现异常
//因此要在这里做判断
if(dir == null || fileName == null){
return ;
}
//读取文件
file = new File(dir,fileName);
//System.out.println(file);
BufferedWriter buffw = null;
try {
String str = this.ta.getText();
buffw = new BufferedWriter(new FileWriter(file));
buffw.write(str);
buffw.flush();
System.out.println("保存文件成功");
//回显目录
this.f.setTitle(frameName+" : "+file.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(buffw != null){
buffw.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
new MyJavaNotepad();
}
}