基于GUI记事本程序,包括实现打开文件,保存文件等功能

帮帮忙了

/* AWT Sample application "记事本应用程序java源代码"
* @author Amiry
* @version 1.00 07/05/25
*/

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 MyMemo 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 MyMemo(String title){
//构造函数,调用父类的构造函数设定标题
super(title);

//创建菜单条
MyMenuBar mb=new MyMenuBar(this);

//向菜单条中菜单添加文件,编辑,查找,帮助4个菜单项
mb.addMenus(new String[]{"文件","编辑","查找","帮助"});

//向每个菜单添项加子菜单
mb.addMenuItems(0,new String[]{"新建","打开","保存","null","退出" });
mb.addMenuItems(1,new String[]{"剪贴","复制","粘贴","清除","null","全选" });
mb.addMenuItems(2,new String[]{"查找","null","查找替换"});
mb.addMenuItems(3,new String[]{"我的记事本信息"});

add(editor);
mb.addActionListener(this);

addWindowListener(new WindowAdapter(){ //关闭"记事本"代码
public void windowClosing(WindowEvent e){
MyMemo.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) { //主函数体

MyMemo memo=new MyMemo("我的记事本"); //创建我的记事本
memo.setSize(300,300); //大小宽300,高300
memo.setVisible(true); //显示窗口
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

最简单的gui软件
1. 功能简洁:记事本主要提供创建、编辑和保存文本文件的功能,操作简单直观,无需复杂的教程或学习成本。2. 系统自带:Windows操作系统自带的记事本软件,无需额外安装,用户可以直接使用。3. 兼容性高:由于是与系统紧密结合的组件,它可以很好地与其他Windows应用程序协作,如保存文件、打开文件等。4. ...

最简单的gui软件
1. 界面直观:记事本的界面设计简洁明了,用户可以轻松找到并打开进行文本编辑。它没有复杂的菜单和工具栏,只有基本的文本编辑功能,如输入文字、保存文件等。2. 功能基础:记事本主要提供文本编辑功能,用户可以轻松创建和编辑文本文件。这种基础的编辑功能使得它成为用户学习GUI软件的基本工具之一。同时,...

...乱码转换软件V046Win10版Ntleas乱码转换软件V046Win10版功能...
2、同时支持原生 X86 和 X64 程序:除了记事本和 winrar 等主流常用软件,有一部分日语游戏已经同时推出了 X86 和 X64 两套平台,支持 X64 转码逐渐变得有意义,程序会根据目标文件自行使用合适的组件;根据打开方式运行非可执文件包括记事本、RAR 等,只需要双击可以打开的程序通常也可以通过右键菜单...

基于Python+UIautomation的WindowsGUI自动化测试实战
1 测试需求 模拟用户操作,打开记事本进行内容输入 2 测试步骤 2.1 用例1 打开记事本;窗口最大化;输入"人生苦短,我用Python!";关闭窗口;不保存直接退出。2.2 用例2 打开记事本;窗口最大化 输入:Python之禅!优美胜于丑陋(Python 以编写优美的代码为目标)明了胜于晦涩(优美的代码应当是明...

jdk1.6新特性
前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户端给指定的邮箱发邮件,用默认应用程序打开或编辑文件(比如,用记事本打开以txt为后缀名的文件),用系统默认的打印机打印文档;后者可以用来在系统托盘区创建一个托盘程序.二:使用JAXB2来实现对象与XML之间的映射JAXB是Java Architecture for XML Binding的...

越览(2):Matlab的简单认识
工作区窗口展示当前Matlab会话中所有已定义变量的列表,包括名称、大小、数据类型与字节数。工具栏通常包含主页、绘图和App三个标签页,提供快速访问常用功能的按钮,如新建文件、打开文件、保存文件、导入数据、设置路径以及启动绘图和应用程序设计。工具栏中最丰富的是应用程序,分为功能应用程序与学科应用程序...

如何使用PowerGUI
用PowerGUI编写的脚本,我们可以将其保存以重复使用。PowerGUI中可将脚本保存为多种格式,其中.ps1是默认格式的 PowerShell格式文件,.psm1是PowerShell模块文件格式,.psd1是数据文件格式,此外还可以保存为html、rtf格式。将编辑好的脚本文件保存下来,以便调用。此外,所有这些格式的脚本文件,我们都可以使用记事本来编辑...

用命令实现双击某个文件的命令
1. 首先,你需要创建一个新的文本文件,并将其保存为`.bat`扩展名,比如`open_file.bat`。2. 在这个`.bat`文件中,你可以使用`start`命令来打开文件。对于文本文件,默认情况下会使用关联的应用程序(如记事本)来打开它。在`.bat`文件中写入以下内容:```batch echo off start "" "C:\\path...

win7电脑常识
七、Windows键+ X [作用]:打开“移动中心”设置窗口 [快捷键]:win+x [小结]:设置窗口里包括显示器亮度控制、音量控制、笔记本电池监控、Mobile手机同步设置、外接显示器管理。等多种功能 八、修复系统默认文件关联 [作用]:修复系统默认文件关联 [快捷键]:无 [小结]:当我们无意中破坏了系统默认的文件关联,这招...

有没有这样的软件: 用jd-gui可以反编译class文件,但是不能修改。有...
1、首先创建一个class文件,打开记事本。2、输入一个基本的java程序,如图所示。3、然后将txt后缀改成.java后缀的文件,如图所示。4、然后用命令行来编译test.java,如图命令。5、然后打开jd-gui工具,点击如图标记图标,进行选择文件。6、选择相应的文件,进行编译test.class文件。7、点击打开后,就可以...

相似回答