getMenu(i).getItem(j).addActionListener(al);
}
}
classMyFile{
privateFileDialogfDlg;
publicMyFile(Frameparent){
fDlg=newFileDialog(parent,"",FileDialog.LOAD);
}
privateStringgetPath(){
returnfDlg.getDirectory()+"\\"+fDlg.getFile();
}
publicStringgetData()throwsIOException{
fDlg.setTitle("打开");
fDlg.setMode(FileDialog.LOAD);
fDlg.setVisible(true);
BufferedReaderbr=newBufferedReader(newFileReader(getPath()));
StringBuffersb=newStringBuffer();
Stringaline;
while((aline=br.readLine())!
=null)
sb.append(aline+'\n');
br.close();
returnsb.toString();
}
publicvoidsetData(Stringdata)throwsIOException{
fDlg.setTitle("保存");
fDlg.setMode(FileDialog.SAVE);
fDlg.setVisible(true);
BufferedWriterbw=newBufferedWriter(newFileWriter(getPath()));
bw.write(data);
bw.close();
}
}
classMyClipboard{
privateClipboardcb;
publicMyClipboard(){
cb=Toolkit.getDefaultToolkit().getSystemClipboard();
}
publicvoidsetData(Stringdata){
cb.setContents(newStringSelection(data),null);
}
publicStringgetData(){
Transferablecontent=cb.getContents(null);
try{
return(String)content.getTransferData(DataFlavor.stringFlavor);
//DataFlavor.stringFlavor会将剪贴板中的字符串转换成Unicode码形式的String对象。
//DataFlavor类是与存储在剪贴板上的数据的形式有关的类。
}catch(Exceptionue){}
returnnull;
}
}
classMyFindDialogextendsDialogimplementsActionListener{
privateLabellFind=newLabel("查找字符串");
privateLabellReplace=newLabel("替换字符串");
privateTextFieldtFind=newTextField(10);
privateTextFieldtReplace=newTextField(10);
privateButtonbFind=newButton("查找");
privateButtonbReplace=newButton("替换");
privateTextAreata;
publicMyFindDialog(Frameowner,TextAreata){
super(owner,"查找",false);
this.ta=ta;
setLayout(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);
bReplace.addActionListener(this);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
MyFindDialog.this.dispose();
}
});
}//构造函数结束
publicvoidshowFind(){
setTitle("查找");
setSize(280,60);
setVisible(true);
}
publicvoidshowReplace(){
setTitle("查找替换");
setSize(280,110);
setVisible(true);
}
privatevoidfind(){
Stringtext=ta.getText();
Stringstr=tFind.getText();
intend=text.length();
intlen=str.length();
intstart=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);
}
publicButtongetBFind(){
returnbFind;
}
privatevoidreplace(){
Stringstr=tReplace.getText();
if(ta.getSelectedText().equals(tFind.getText()))
ta.replaceRange(str,ta.getSelectionStart(),ta.getSelectionEnd());
elsefind();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==bFind)
find();
elseif(e.getSource()==bReplace)
replace();
}
}
classMyMemoextendsFrameimplementsActionListener{
privateTextAreaeditor=newTextArea();//可编辑的TextArea
privateMyFilemf=newMyFile(this);//MyFile对象
privateMyClipboardcb=newMyClipboard();
privateMyFindDialogfindDlg=newMyFindDialog(this,editor);
publicMyMemo(Stringtitle){//构造函数
super(title);
MyMenuBarmb=newMyMenuBar(this);
//添加需要的菜单及菜单项
mb.addMenus(newString[]{"文件","编辑","查找","帮助"});
mb.addMenuItems(0,newString[]{"新建","打开","保存",null,"全选"});
mb.addMenuItems(1,newString[]{"剪贴","复制","粘贴","清除",null,"全选"});
mb.addMenuItems(2,newString[]{"查找",null,"查找替换"});
mb.addMenuItems(3,newString[]{"我的记事本信息"});
add(editor);//为菜单项注册动作时间监听器
mb.addActionListener(this);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
MyMemo.this.dispose();
}
});//分号不能忘了
}//构造函数完
publicvoidactionPerformed(ActionEvente){
Stringselected=e.getActionCommand();//获取菜单项标题
if(selected.equals("新建"))
editor.setText("");
elseif(selected.equals("打开")){
try{
editor.setText(mf.getData());
}catch(IOExceptionie){}
}
elseif(selected.equals("保存")){
try{
mf.setData(editor.getText());
}catch(IOExceptionie){}
}
elseif(selected.equals("退出")){
dispose();
}
elseif(selected.equals("剪贴")){
//将选中的字符串复制到剪贴板中并清除字符串
cb.setData(editor.getSelectedText());
editor.replaceRange("",editor.getSelectionStart(),editor.getSelectionEnd());
}
elseif(selected.equals("复制")){
cb.setData(editor.getSelectedText());
}
elseif(selected.equals("粘贴")){
Stringstr=cb.getData();
editor.replaceRange(str,editor.getSelectionStart(),editor.getSelectionEnd());
//粘贴在光标位置
}
elseif(selected.equals("清除")){
editor.replaceRange("",editor.getSelectionStart(),editor.getSelectionEnd());
}
elseif(selected.equals("全选")){
editor.setSelectionStart(0);
editor.setSelectionEnd(editor.getText().length());
}
elseif(selected.equals("查找")){
findDlg.showFind();
}
elseif(selected.equals("查找替换")){
findDlg.showReplace();
}
}
publicstaticvoidmain(String[]args){
MyMemomemo=newMyMemo("记事本");
memo.setSize(300,300);
memo.setVisible(true);
}
}