package awt_notebook;
import java.awt.Color;
import java.awt.Dimension;
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.MenuShortcut;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class NoteBook extends Frame implements ActionListener{
private static final long serialVersionUID = 1L;
MenuBar menuBar = new MenuBar();
TextArea textarea = new TextArea();
// 文件菜单
Menu fileMenu = new Menu("文件");
MenuItem newItem = new MenuItem("新建");
MenuItem openItem = new MenuItem("打开");
MenuItem saveItem = new MenuItem("保存");
MenuItem saveAsItem = new MenuItem("另存为");
MenuItem exitItem = new MenuItem("退出");
// 编辑菜单
Menu editMenu = new Menu("编辑");
MenuItem selectItem = new MenuItem("全选");
MenuItem copyItem = new MenuItem("复制");
MenuItem cutItem = new MenuItem("剪切");
MenuItem pasteItem = new MenuItem("粘贴");
String fileName = "NoName.txt";// 默认的文件名
Toolkit toolkit = Toolkit.getDefaultToolkit();// 默认工具包
Clipboard clipBoard = toolkit.getSystemClipboard();// 剪切板对象
// 创建,并初始化打开文件对话框& 保存文件对话框
FileDialog openFileDialog = new FileDialog(this, "Open File",
FileDialog.LOAD);
FileDialog saveAsFileDialog = new FileDialog(this, "Save File As",
FileDialog.SAVE);
public NoteBook() {
setTitle("NotePad");
setFont(new Font("Times New Roman", Font.PLAIN, 12));
setBackground(Color.white);
setSize(600, 400);
// 将各子项添加到"文件"菜单下
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(saveAsItem);
fileMenu.addSeparator(); // 分割线
fileMenu.add(exitItem);
// 将各子项添加到"编辑"菜单下
editMenu.add(selectItem);
editMenu.addSeparator(); // 分割线
editMenu.add(copyItem);
editMenu.add(cutItem);
editMenu.add(pasteItem);
// 将"文件" 和 "编辑" 添加到菜单栏
menuBar.add(fileMenu);
menuBar.add(editMenu);
setMenuBar(menuBar);
add(textarea);
// 程序退出
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 为各子菜单项添加监听器,添加相应快捷键
newItem.addActionListener(this);
newItem.setShortcut(new MenuShortcut(KeyEvent.VK_N, true));
openItem.addActionListener(this);
openItem.setShortcut(new MenuShortcut(KeyEvent.VK_O, true));
saveItem.addActionListener(this);
saveItem.setShortcut(new MenuShortcut(KeyEvent.VK_S, true));
saveAsItem.addActionListener(this);
saveAsItem.setShortcut(new MenuShortcut(KeyEvent.VK_S, true));
exitItem.addActionListener(this);
exitItem.setShortcut(new MenuShortcut(KeyEvent.VK_E, true));
selectItem.addActionListener(this);
selectItem.setShortcut(new MenuShortcut(KeyEvent.VK_A, true));
copyItem.addActionListener(this);
copyItem.setShortcut(new MenuShortcut(KeyEvent.VK_C, true));
cutItem.addActionListener(this);
cutItem.setShortcut(new MenuShortcut(KeyEvent.VK_X, true));
pasteItem.addActionListener(this);
pasteItem.setShortcut(new MenuShortcut(KeyEvent.VK_P, true));
}
//为菜单项添加了ActionListener接口,必须定义actionPerformed方法
public void actionPerformed(ActionEvent e) {
//调用e.getSource()返回事件源,程序作出相应处理
Object eventSource = e.getSource();
// 判断事件源是哪一个菜单项
if (eventSource == newItem ) {//新建
textarea.setText("");
} else if (eventSource == openItem ) {//打开
openFileDialog.setVisible(true);
fileName = openFileDialog.getDirectory() + openFileDialog.getFile();
if (fileName != null)
readFile(fileName);
System.out.println(newItem.getShortcut() );
} else if (eventSource == saveItem) {//保存
if (fileName != null)
writeFile(fileName);
} else if (eventSource == saveAsItem) {//另存为
saveAsFileDialog.setVisible(true);
fileName = saveAsFileDialog.getDirectory()
+ saveAsFileDialog.getFile();
if (fileName != null)
writeFile(fileName);
} else if (eventSource == selectItem) {//全选
textarea.selectAll();
} else if (eventSource == copyItem) {//复制
String text = textarea.getSelectedText();
StringSelection selection = new StringSelection(text);// 创建能传输指定String的Transferable
clipBoard.setContents(selection, null);// 将剪切板的当前内容设置到指定的Transferable对象
} else if (eventSource == cutItem) {//剪切
String text = textarea.getSelectedText();
StringSelection selection = new StringSelection(text);// 创建能传输指定String的Transferable
clipBoard.setContents(selection, null);// 将剪切板的当前内容设置到指定的Transferable对象
//用空字符串代替指定起始位置的文本
textarea.replaceRange("", textarea.getSelectionStart(), textarea.getSelectionEnd());
}else if(eventSource == pasteItem){//粘贴
Transferable contents = clipBoard.getContents(this);
if(contents == null )return ;
String text="";
try {
//返回一个对象,表示将要被传输的数据
text = (String)contents.getTransferData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
//用text字符串代替起始位置的文本
textarea.replaceRange(text, textarea.getSelectionStart(), textarea.getSelectionEnd());
}else if(eventSource == exitItem){//退出
System.exit(0);
}
}
public static void main(String[] args) {
Frame frame = new NoteBook();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
//调整notebook frame的长宽,以适应屏幕尺寸
if(frameSize.height>screenSize.height)
frameSize.height = screenSize.height;
if(frameSize.width>screenSize.width)
frameSize.width = screenSize.width;
frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);
frame.setVisible(true);
}
//写文件
private void writeFile(String fileName2) {
try {
File file = new File(fileName);
FileWriter writeOut = new FileWriter(file);
writeOut.write(textarea.getText());
writeOut.close();
}catch (IOException e) {
System.out.println( "Error opening File" );
}
}
//读文件
private void readFile(String fileName) {
try {
File file = new File(fileName);
FileReader readIn = new FileReader(file);
int size = (int )file.length();
int charsRead = 0;//创建,初始化整型数据charsRead
char[] content = new char[size];
while(readIn.ready())
charsRead += readIn.read(content, charsRead, size-charsRead);//读出文件字符
readIn.close();
//设置文本区域内容
textarea.setText(new String(content,0,charsRead));
} catch (FileNotFoundException e) {
System.out.println( " Can Not Find the File" );
} catch (IOException e) {
System.out.println( "Error opening File" );
}
}
}
NoteBook Java实现记事本功能
最新推荐文章于 2021-02-25 09:24:25 发布