📄 mytextbook.java
字号:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
public class MyTextBook extends Frame implements ActionListener //记事本主类
{
private TextArea editor=new TextArea(); //可编辑的TextArea
private MyFile mf=new MyFile(this);
private MyClipboard cb=new MyClipboard();
private MyFindDialog findDlg=new MyFindDialog(this,editor);
public MyTextBook(String title)
{
super(title);
MyMenuBar mb=new MyMenuBar(this);
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)
{
MyTextBook.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.showFind();
}
else if(selected.equals("查找替换"))
{
findDlg.showReplace();
}
}
public static void main(String[] args)
{
MyTextBook book=new MyTextBook("我的记事本");
book.setSize(300,300);
book.setVisible(true);
}
}
class MyMenuBar extends MenuBar
{
public MyMenuBar(Frame parent)
{
parent.setMenuBar(this);
}
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++)
{
if(items[i]!=null)getMenu(menuNumber).add(new MenuItem(items[i]));
else getMenu(menuNumber).addSeparator();
}
}
public void addActionListener(ActionListener al)
{
for(int i=0;i<getMenuCount();i++)
{
for(int j=0;j<getMenu(i).getItemCount();j++)
{
getMenu(i).getItem(j).addActionListener(al);
}
}
}
}
class 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
{
fDlg.setTitle("保存");
fDlg.setMode(FileDialog.SAVE);
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;
}
}
class MyFindDialog extends Dialog implements ActionListener
{
private Label lFind=new Label("查找词汇");
private Label lReplace=new Label("替换词汇");
private TextField tFind=new TextField(10);
private TextField tReplace=new TextField(10);
private Button bFind=new Button("查找");
private Button bReplace=new Button("替换");
private TextArea ta;
public MyFindDialog(Frame owner,TextArea ta)
{
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);
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();
String str=tFind.getText();
int end=text.length();
int len=str.length();
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();
else if(e.getSource()==bReplace)replace();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -