您的位置:首页 > 编程语言 > Java开发

java实现的简单记事本程序

2013-04-13 19:48 489 查看

//练习:利用GUI知识,和IO流知识,做一个简单的记事本程序。
//代码:
package cn.itcast.exercise;

import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

public class Notepad extends Frame {

private static final long serialVersionUID = 1L;

private MenuItem openMenuItem;	// 由于多个方法中都使用, 定义为成员变量
private MenuItem saveMenuItem;
private MenuItem exitMenuItem;

private TextArea textArea;

private MenuItem gbkMenuItem;
private MenuItem utf8MenuItem;

private File file;
private String charset = "GBK";

public static void main(String []args){
new Notepad();
}

public Notepad() {
init();					// 初始化
generateMenuBar();		// 构建菜单栏
generateTextArea();		// 构建文本域
handleMenuItemEvent();	// 处理菜单项点击事件
setVisible(true);
}

private void init() {		// 初始化, 设置大小和位置, 处理关闭事件
setTitle("记事本");
setSize(600, 400);
setLocation(400, 100);
setIconImage(Toolkit.getDefaultToolkit().createImage("300png059.png"));
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

private void generateMenuBar() {
MenuBar menuBar = new MenuBar();	// 菜单栏
Menu fileMenu = new Menu("文件");	// 菜单
Menu editMenu = new Menu("编辑");
Menu viewMenu = new Menu("查看");

openMenuItem = new MenuItem("打开");
saveMenuItem = new MenuItem("保存");
exitMenuItem = new MenuItem("退出");

MenuItem copyMenuItem = new MenuItem("复制");
MenuItem pasteMenuItem = new MenuItem("粘贴");
MenuItem cutMenuItem = new MenuItem("剪切");

gbkMenuItem = new MenuItem("GBK");
utf8MenuItem = new MenuItem("UTF-8");

fileMenu.add(openMenuItem);		// 给菜单添加菜单项
fileMenu.add(saveMenuItem);
fileMenu.addSeparator();		// 分隔符
fileMenu.add(exitMenuItem);

editMenu.add(copyMenuItem);
editMenu.add(pasteMenuItem);
editMenu.add(cutMenuItem);

viewMenu.add(gbkMenuItem);
viewMenu.add(utf8MenuItem);

menuBar.add(fileMenu);			// 给菜单栏添加菜单
menuBar.add(editMenu);
menuBar.add(viewMenu);

setMenuBar(menuBar);			// 把菜单栏添加到窗体中

// 如果需要构建子级菜单, 那么可以在Menu中放Menu, 然后内部的Menu再放MenuItem
}

private void generateTextArea() {
textArea = new TextArea();									// 创建文本域
textArea.setFont(new Font("Courier New", Font.PLAIN, 15));	// 指定字体
add(textArea);												// 添加到窗体中

textArea.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_O)	// 判断快捷键
open();
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S)
save();
}
});
}

private void handleMenuItemEvent() {
exitMenuItem.addActionListener(new ActionListener() {		// 当菜单项被选择时关闭窗口
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});

openMenuItem.addActionListener(new ActionListener() {		// 当菜单项被选择时弹出对话框
public void actionPerformed(ActionEvent e) {
open();
}
});

saveMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
save();
}
});

gbkMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
charset = "GBK";
loadFile(file);
}
});

utf8MenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
charset = "UTF-8";
loadFile(file);
}
});
}

private void open() {
// 弹出一个对话框
FileDialog dialog = new FileDialog(this, "打开", FileDialog.LOAD);
dialog.setVisible(true);

// 获取选中的文件路径
String dir = dialog.getDirectory();
String name = dialog.getFile();
if (dir != null && name != null) {
loadFile(new File(dir, name));	// 读取文件内容, 转为String, 显示在TextArea中
}
}

private void loadFile(File file) {
this.file = file;
try (
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1)				// 从文件中读取数据, 写到内存
baos.write(buffer, 0, len);

String content = new String(baos.toByteArray(), charset);	// 获取内存中所有数据, 转为String
textArea.setText(content);							// 把文件内容放到TextArea中
} catch (Exception e) {
e.printStackTrace();
}
}

private void save() {
FileDialog dialog = new FileDialog(this, "保存", FileDialog.SAVE);	// 如果选择已存在文件, 会有提示
dialog.setVisible(true);

String dir = dialog.getDirectory();
String name = dialog.getFile();
if (dir != null && name != null) {
saveFile(new File(dir, name));		// 把TextArea中的文本写入到指定的File中
}
}

private void saveFile(File file) {
String content = textArea.getText();
try (
FileWriter fw = new FileWriter(file);
) {
fw.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: