📄 notebook4.java
字号:
import java.awt.*; //导入抽象窗口工具集包(abstract window toolkit)
import java.awt.event.*; //导入窗口事件工具包
import java.io.*; //导入输入输出工具包
import java.awt.datatransfer.*; //导入数据转化工具包
//菜单工具条类(添加菜单项,子菜单)
class MyMenuBar extends MenuBar { // MyMenuBar类继承MenuBar类(类方法)
public MyMenuBar(Frame parent) { // 构造函数
parent.setMenuBar(this); // 向parent添加自身
}
public void addMenus(String[] menus) { // 菜单条下添加菜单项
for (int i = 0; i < menus.length; i++)
add(new Menu(menus[i]));
}
public void addMenuItems(int menuNumber, String[] items) { // 菜单添加(类方法)
for (int i = 0; i < items.length; i++) { // 循环0~menus.length-1次
if (items[i] != null) // 向各个菜单项添加子菜单
getMenu(menuNumber).add(new MenuItem(items[i]));
else
getMenu(menuNumber).addSeparator();
}
}
public void addActionListener(ActionListener a1) {// 注册所有动作监听对象(类方法)
for (int i = 0; i < getMenuCount(); i++)
// 循环到菜第i个菜单数
for (int j = 0; j < getMenu(i).getItemCount(); j++)
// 向第i个菜单的第j个子菜单注册动作事件监听
getMenu(i).getItem(j).addActionListener(a1);
}
}
// 文件管理类(处理文件的打开,保存等,拥有文件对话框成员)
class MyFile { // MyFile类定义
private FileDialog fDlg; // 声明一个文件对话框(类成员)
public MyFile(Frame parent) { // 构造函数(类方法)
fDlg = new FileDialog(parent, "", FileDialog.LOAD);// 初始化文件对话框
}
private String getPath() { // (类方法)
return fDlg.getDirectory() + "\\" + fDlg.getFile(); // 返回选中文件的路径
}
public String getData() throws IOException {
fDlg.setTitle("打开"); // 设定文件对话框的标题为"打开"
fDlg.setMode(FileDialog.LOAD); // 将文件对话框的模式设定为打开模式
fDlg.setVisible(true); // 显示文件对话框
// 读取文件对话框选中的文件的内容并将其返回
BufferedReader br = new BufferedReader(new FileReader(getPath()));
StringBuffer sb = new StringBuffer();
String aline;
while ((aline = br.readLine()) != null)
sb.append(aline + '\n');
br.close();
return sb.toString();
}
public void setData(String data) throws IOException {
// 显示保存模式对话框,并将数据data存入选中的文件中
fDlg.setTitle("保存");
fDlg.setMode(FileDialog.LOAD);
fDlg.setVisible(true);
BufferedWriter bw = new BufferedWriter(new FileWriter(getPath()));
bw.write(data);
bw.close();
}
}
// 文本管理类(提供记事本的剪贴,复制,粘贴等功能)
class MyClipboard { // 获取系统剪贴板
private Clipboard cb; // 声明剪贴板对象
public MyClipboard() { // 构造函数,获取系统剪贴板
cb = Toolkit.getDefaultToolkit().getSystemClipboard();
}
public void setData(String data) { // 将字符串存入剪贴板
cb.setContents(new StringSelection(data), null);
}
public String getData() { // 从剪贴板读取数据,并将其返回
Transferable content = cb.getContents(null);
try {
return (String) content.getTransferData(DataFlavor.stringFlavor);
} catch (Exception ue) {
}
return null;
}
}
// 查找替换类(用于查找TextArea中特定字符串功能,并替换特定字符串
class MyFindDialog extends Dialog implements ActionListener {
private Label lFind = new Label("查找字符串");
private Label lReplace = new Label("替换字符串");
private TextField tFind = new TextField(10); // 接受待查字符串TextField
private TextField tReplace = new TextField(10); // 接受要替换字符串TextField
private Button bFind = new Button("查找"); // 创建查找按钮
private Button bReplace = new Button("替换"); // 替换按钮
private TextArea ta; // ta为含有待查字符串的TextField
public MyFindDialog(Frame owner, TextArea ta) { // 构造函数
super(owner, "查找", false); // 非模式对话框
this.ta = ta;
setLayout(null); // 将Layout设为null
// 设定组件的位置大小(横坐标,纵坐标,高,宽)
lFind.setBounds(10, 30, 80, 20);
lReplace.setBounds(10, 70, 80, 20);
tFind.setBounds(90, 30, 90, 20);
tReplace.setBounds(90, 70, 90, 20);
bFind.setBounds(190, 30, 80, 20);
bReplace.setBounds(190, 70, 80, 20);
add(lFind); // 添加各个组件
add(tFind);
add(bFind);
add(lReplace);
add(tReplace);
add(bReplace);
setResizable(false); // 禁止用户更改对话框大小
bFind.addActionListener(this); // 为bFind添加监听对象
addWindowListener(new WindowAdapter() { // 为对话框注册关闭窗口事件监听器
public void windowClosing(WindowEvent e) {
MyFindDialog.this.dispose();
}
});
}
public void showFind() {
setTitle("查找"); // 将对话框标题设为"查找"
setSize(280, 60); // 将对话框设定为合适大小
setVisible(true);
}
public void showReplace() {
setTitle("查找替换"); // 标题:"查找替换"
setSize(280, 110); // 设定大小
setVisible(true);
}
private void find() { // 查询方法
String text = ta.getText(); // 从ta中获取字符串,并存入text中
String str = tFind.getText(); // 获取tFind字符串,并存入text中
int end = text.length(); // 获取ta字符串的长度
int len = str.length(); // 获取tFind字符串的长度
int start = ta.getSelectionEnd(); // 从关标位置开始查找字符串
if (start == end)
start = 0; // 若关标位于末尾,则从头开始查找
for (; start <= end - len; start++) {
if (text.substring(start, start + len).equals(str)) {// 若找到查找字符串
ta.setSelectionStart(start); // 选中并显示字符串
ta.setSelectionEnd(start + len);
return; // 退出方法
}
}
ta.setSelectionStart(end); // 若找不到待查字符串,则将光标置于末尾
ta.setSelectionEnd(end);
}
private void replace() { // 替换方法
String str = tReplace.getText(); // 获取待查字符串
if (ta.getSelectedText().equals(tFind.getText())) // 若相同则替换
ta.replaceRange(str, ta.getSelectionStart(), ta.getSelectionEnd()); // 若不同则继续查找
else
find();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == bFind) // 按下"查找"按钮,调用find()方法
find();
else if (e.getSource() == bReplace) // 按下"替换"按钮,调用replace()方法
replace();
}
}
public class NoteBook4 extends Frame implements ActionListener {
private TextArea editor = new TextArea(); // 创建文本编辑区
private MyFile mf = new MyFile(this); // 创建文件
private MyClipboard cb = new MyClipboard(); // 创建剪贴板
private MyFindDialog findDlg = new MyFindDialog(this, editor);// 创建查找对话框
public NoteBook4(String title) {
// 构造函数,调用父类的构造函数设定标题
super(title);
// 创建菜单条
MyMenuBar mb = new MyMenuBar(this);
// 向菜单条中菜单添加文件,编辑,查找,帮助4个菜单项
mb.addMenus(new String[] { "文件", "编辑", "查找", "帮助" });
// 向每个菜单添项加子菜单
mb.addMenuItems(0, new String[] { "新建", "打开", "保存", "退出" });
mb.addMenuItems(1,
new String[] { "剪贴", "复制", "粘贴", "清除", "全选" });
mb.addMenuItems(2, new String[] { "查找", "查找替换" });
mb.addMenuItems(3, new String[] { "我的记事本信息" });
add(editor);
mb.addActionListener(this);
addWindowListener(new WindowAdapter() { // 关闭"记事本"代码
public void windowClosing(WindowEvent e) {
NoteBook4.this.dispose();
}
});
}
public void actionPerformed(ActionEvent e) { // 事件执行方法
String selected = e.getActionCommand(); // 获取命令
if (selected.equals("新建")) // 执行"新建"命令
editor.setText("");
else if (selected.equals("打开")) { // 执行"打开"命令
try { // 可能出现异常
editor.setText(mf.getData());
} catch (IOException ie) {
}
} else if (selected.equals("保存")) { // 执行"保存"命令
try { // 可能出现异常
mf.setData(editor.getText());
} catch (IOException ie) {
}
} else if (selected.equals("退出")) { // 执行"退出"命令
dispose();
} else if (selected.equals("剪贴")) { // 执行"剪贴"命令
cb.setData(editor.getSelectedText());
editor.replaceRange("", editor.getSelectionStart(), editor
.getSelectionEnd());
} else if (selected.equals("复制")) { // 执行"复制"命令
cb.setData(editor.getSelectedText());
} else if (selected.equals("粘贴")) { // 执行"粘贴"命令
String str = cb.getData();
editor.replaceRange(str, editor.getSelectionStart(), editor
.getSelectionEnd());
} else if (selected.equals("清除")) { // 执行"清除"命令
editor.replaceRange("", editor.getSelectionStart(), editor
.getSelectionEnd());
} else if (selected.equals("全选")) { // 执行"全选"命令
editor.setSelectionStart(0);
editor.setSelectionEnd(editor.getText().length());
} else if (selected.equals("查找")) { // 执行"查找"命令
findDlg.showReplace();
} else if (selected.equals("查找替换")) { // 执行"查找替换"命令
findDlg.showReplace();
}
}
public static void main(String[] args) { // 主函数体
NoteBook4 memo = new NoteBook4("我的记事本"); // 创建我的记事本
memo.setSize(300, 300); // 大小宽300,高300
memo.setVisible(true); // 显示窗口
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -