📄 notepad.java
字号:
package awt;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.io.*;
/**
* Title: Notepad类<br>
* Description: 简易记事本,能创建、打开和保存文本文件,具有剪切、复制和粘贴功能,能设置字体颜色以及字号<br>
* Copyright:(c)2007 www.luzhou.net<br>
* Company: 泸州职业技术学院电信系
* @author 华卫
* @version 1.00
*/
public class Notepad{
/**
* 变量及常量定义部分:框架、文本区、标签、菜单、对话框、文件对话框
* 文件名、文件内容、系统剪贴板、屏幕宽度和高度
*/
//定义主窗口及组件
Frame frmNote=new Frame("记事本");
TextArea txaNote=new TextArea("",20,60,TextArea.SCROLLBARS_VERTICAL_ONLY);
Label lblStatusbar=new Label("【JAVA语言程序设计】教学示例程序_授课教师:华卫");
//定义菜单栏
MenuBar mnbNote=new MenuBar();
Menu mnuFile=new Menu("文件");
MenuItem mniNew=new MenuItem("新建");
MenuItem mniOpen=new MenuItem("打开");
MenuItem mniSave=new MenuItem("保存");
MenuItem mniExit=new MenuItem("退出");
Menu mnuEdit=new Menu("编辑");
MenuItem mniCut=new MenuItem("剪切");
MenuItem mniCopy=new MenuItem("复制");
MenuItem mniPaste=new MenuItem("粘贴");
MenuItem mniDelete=new MenuItem("删除");
Menu mnuSet=new Menu("设置");
Menu mnuForeColor=new Menu("前景色");
CheckboxMenuItem cmiBlack=new CheckboxMenuItem("黑色",true);
CheckboxMenuItem cmiRed=new CheckboxMenuItem("红色",false);
CheckboxMenuItem cmiBlue=new CheckboxMenuItem("蓝色",false);
Menu mnuFontSize=new Menu("字号");
CheckboxMenuItem cmiBig=new CheckboxMenuItem("大号",true);
CheckboxMenuItem cmiMiddle=new CheckboxMenuItem("中号",false);
CheckboxMenuItem cmiSmall=new CheckboxMenuItem("小号",false);
Menu mnuHelp=new Menu("帮助");
MenuItem mniHelp=new MenuItem("帮助");
MenuItem mniAbout=new MenuItem("关于");
//定义文件对话框
FileDialog fDlg=new FileDialog(frmNote,"");
//定义对话框及组件
Dialog dlgMessage=new Dialog(frmNote,"",true);
Panel panUpper=new Panel();
Panel panLower=new Panel();
Label lblMessage=new Label("");
Button btnOK=new Button("确定");
//定义文件名
String strFileName;
//定义存放文件内容的字符串
String strFileContent;
//定义系统剪贴板
Clipboard clipBoard=Toolkit.getDefaultToolkit().getSystemClipboard();
public static void main(String[] args) {
new Notepad();
}
public Notepad(){
/**
* 设计用户界面:设置各组件的属性
*/
//设置窗口属性
frmNote.setSize(800,600);
frmNote.setLocationRelativeTo(null); //让窗口在屏幕居中
//添加文本区并设置其属性
frmNote.add(txaNote);
txaNote.setFont(new Font("黑体",Font.PLAIN,30));
//添加标签并设置其属性
frmNote.add(lblStatusbar,"South");
lblStatusbar.setBackground(new Color(212, 208, 200));
//设置菜单栏
frmNote.setMenuBar(mnbNote);
//添加文件菜单
mnbNote.add(mnuFile);
mnuFile.add(mniNew);
mnuFile.add(mniOpen);
mnuFile.add(mniSave);
mnuFile.addSeparator();
mnuFile.add(mniExit);
//添加编辑菜单
mnbNote.add(mnuEdit);
mnuEdit.add(mniCut);
mnuEdit.add(mniCopy);
mnuEdit.add(mniPaste);
mnuEdit.addSeparator();
mnuEdit.add(mniDelete);
//添加设置菜单
mnbNote.add(mnuSet);
mnuSet.add(mnuForeColor);
mnuForeColor.add(cmiBlack);
mnuForeColor.add(cmiRed);
mnuForeColor.add(cmiBlue);
mnuSet.add(mnuFontSize);
mnuFontSize.add(cmiBig);
mnuFontSize.add(cmiMiddle);
mnuFontSize.add(cmiSmall);
//添加帮助菜单
mnbNote.add(mnuHelp);
mnuHelp.add(mniHelp);
mnuHelp.add(mniAbout);
//设置窗口可见
frmNote.setVisible(true);
//设置对话框
dlgMessage.setSize(200, 100);
dlgMessage.setTitle("记事本");
dlgMessage.setLocation(frmNote.getX()+(frmNote.getWidth()-dlgMessage.getWidth())/2, frmNote.getY()+(frmNote.getHeight()-dlgMessage.getHeight())/2);
dlgMessage.add(panUpper,"Center");
dlgMessage.add(panLower,"South");
panUpper.add(lblMessage);
panLower.add(btnOK);
/**
* 给组件注册监听器,并编写相应的事件处理程序
*/
//窗口关闭事件
frmNote.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//文本区中的鼠标运动事件
txaNote.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e) {
//判断文本区中是否选中了文本,以此决定“剪切”、“复制”和“删除”菜单项是否可用
if(txaNote.getSelectedText().equals("")){
mniCut.setEnabled(false);
mniCopy.setEnabled(false);
mniDelete.setEnabled(false);
}else{
mniCut.setEnabled(true);
mniCopy.setEnabled(true);
mniDelete.setEnabled(true);
}
//判断剪贴板里是否有内容,以此决定“粘贴”菜单项是否可用
Transferable contents=clipBoard.getContents(this); //从剪贴板获取可传输数据对象
if(contents==null)
mniPaste.setEnabled(false);
else
mniPaste.setEnabled(true);
}
});
//新建菜单项单击事件
mniNew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
strFileName=null;
frmNote.setTitle("记事本"); //窗口标题栏复原
txaNote.setText(""); //清空文本区
}
});
//打开菜单项单击事件
mniOpen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
fDlg.setMode(FileDialog.LOAD); //设置为打开对话框
fDlg.setTitle("打开文件");
fDlg.setVisible(true);
strFileName=fDlg.getDirectory()+fDlg.getFile();
if(fDlg.getFile()==null){
lblMessage.setText("您没有选择任何文件!");
dlgMessage.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dlgMessage.dispose();
}
});
btnOK.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
dlgMessage.dispose();
}
});
dlgMessage.setVisible(true);
}else{
try {
BufferedReader br=new BufferedReader(new FileReader(strFileName));
strFileContent="";
String strNextLine; //用于存放文本文件的一行内容
while((strNextLine=br.readLine())!=null){
strFileContent=strFileContent+strNextLine+"\n";
}
//把文件内容显示在文本区中
txaNote.setText(strFileContent);
//窗口标题栏显示所打开的文件的路径及名称
frmNote.setTitle("记事本 - "+strFileName);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
//保存菜单项单击事件
mniSave.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(frmNote.getTitle().length()==3){//新建文档
fDlg.setMode(FileDialog.SAVE); //设置为另存对话框
fDlg.setTitle("保存文件");
fDlg.setVisible(true);
strFileName=fDlg.getDirectory()+fDlg.getFile();
if(fDlg.getFile()==null){//没有设置文件名
lblMessage.setText("您没有设置文件名!");
dlgMessage.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dlgMessage.dispose();
}
});
btnOK.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
dlgMessage.dispose();
}
});
dlgMessage.setVisible(true);
}else{
try {
FileWriter fw=new FileWriter(strFileName);
fw.write(txaNote.getText());
//窗口标题栏显示保存文件的路径及名称
frmNote.setTitle("记事本 - "+strFileName);
fw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}else{//打开已有文档
try {
FileWriter fw=new FileWriter(strFileName);
fw.write(txaNote.getText());
fw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
//退出菜单项单击事件
mniExit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//剪切菜单项单击事件
mniCut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//获得选中的文本
String selectedText=txaNote.getSelectedText();
//由选中的文本创建StringSelection对象
StringSelection selection=new StringSelection(selectedText);
//将剪贴板的当前内容设置到指定的StringSelection对象
clipBoard.setContents(selection, null);
//把选中的文本替换为空串
txaNote.replaceRange("",txaNote.getSelectionStart(),txaNote.getSelectionEnd());
}
});
//复制菜单项单击事件
mniCopy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//获得选中的文本
String selectedText=txaNote.getSelectedText();
//由选中的文本创建StringSelection对象
StringSelection selection=new StringSelection(selectedText);
//将剪贴板的当前内容设置到指定的StringSelection对象
clipBoard.setContents(selection, null);
}
});
//粘贴菜单项单击事件
mniPaste.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//从剪贴板获取可传输数据对象
Transferable contents=clipBoard.getContents(this);
if(contents!=null){
String strText=null;
try{
//从剪贴板可传输对象中获取可传输数据,并强制转化成字符串
strText=(String)contents.getTransferData(DataFlavor.stringFlavor);
}catch(Exception exception){
System.out.println(exception.getStackTrace());
}
//用剪贴板的数据替换文本区中选定的内容
txaNote.replaceRange(strText,txaNote.getSelectionStart(),txaNote.getSelectionEnd());
}
}
});
//删除菜单项单击事件
mniDelete.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//把选中的文本替换为空串
txaNote.replaceRange("",txaNote.getSelectionStart(),txaNote.getSelectionEnd());
}
});
//黑色菜单项单击事件
cmiBlack.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if(cmiBlack.getState()){
cmiRed.setState(false);
cmiBlue.setState(false);
txaNote.setForeground(Color.BLACK);
}
}
});
//红色菜单项单击事件
cmiRed.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if(cmiRed.getState()){
cmiBlack.setState(false);
cmiBlue.setState(false);
txaNote.setForeground(Color.RED);
}
}
});
//蓝色菜单项单击事件
cmiBlue.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if(cmiBlue.getState()){
cmiRed.setState(false);
cmiBlack.setState(false);
txaNote.setForeground(Color.BLUE);
}
}
});
//大号菜单项单击事件
cmiBig.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if(cmiBig.getState()){
cmiMiddle.setState(false);
cmiSmall.setState(false);
txaNote.setFont(new Font("黑体",Font.PLAIN,30));
}
}
});
//中号菜单项单击事件
cmiMiddle.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if(cmiMiddle.getState()){
cmiBig.setState(false);
cmiSmall.setState(false);
txaNote.setFont(new Font("黑体",Font.PLAIN,25));
}
}
});
//小号菜单项单击事件
cmiSmall.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
if(cmiSmall.getState()){
cmiBig.setState(false);
cmiMiddle.setState(false);
txaNote.setFont(new Font("黑体",Font.PLAIN,20));
}
}
});
//帮助菜单单击事件
mniHelp.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
try {
Runtime.getRuntime().exec("cmd /c start awt/notepad.chm");
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
//关于菜单单击事件
mniAbout.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
lblMessage.setText("泸职院电信系_华卫_2007年编写");
dlgMessage.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dlgMessage.dispose();
}
});
btnOK.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
dlgMessage.dispose();
}
});
dlgMessage.setVisible(true);
}
});
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -