⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytextbook.java

📁 实现一个记事本的功能
💻 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 + -