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

📄 notepad.java

📁 一个java写的记事本
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * @(#)NotePad.java 1.0 07/06/18
 * @auther:shya
 * @version:1.0
 */
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;

/**
 主框架类
*/
public class NotePad
{
	MainFrame main = new MainFrame("NotePad");	
	public static void main(String[] args)
	{
		NotePad notePad = new NotePad();	
	}		
}
class MainFrame extends JFrame
{
	private Dimension dm;
	private JFrame frame 	  	= new JFrame()		;
	private MenuBars menuBar  	= new MenuBars()	;
	private TextPane[] textPane = new TextPane[N]	;
	private JTabbedPane tab 	= new JTabbedPane()	;
	private static String findStr;
	private static String sourStr;
	private static int curSearch ;
	private static int N 	 = 10;
	private static int count = 0 ;
	private static int current   ;
	private static int NUM   = 5 ;	
	
	MainFrame(String title)
	{
		dm = Toolkit.getDefaultToolkit().getScreenSize();
		textPane[0] = new TextPane();
		tab.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);	
		tab.add(textPane[0],"untitled-1")	;
		tab.addMouseListener(new CloseTab());
		
		frame.add(tab)			  	;
		frame.setJMenuBar(menuBar)  ;
		frame.setTitle(title)	   	;	
		frame.setVisible(true)	    ;
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(dm.width/6,dm.height/6,2*dm.width/3,2*dm.height/3);
	}
	public class CloseTab extends MouseAdapter
	{
		public void mouseClicked(MouseEvent e)
			{
				current = tab.getSelectedIndex();
				if(e.getClickCount() == 2)
					{
						tab.remove(current);
						count--;
					}	
			}			
	}
/**
 菜单栏类
*/
class MenuBars extends JMenuBar
{
	public  JMenu file = new JMenu("File");
	private JMenu edit = new JMenu("Edit");
	private JMenu view = new JMenu("View");
	private JMenu tool = new JMenu("Tool");
	private JMenu help = new JMenu("Help");
	
	private JMenuItem news 	= new JMenuItem("New")	  ;
	private JMenuItem open 	= new JMenuItem("Open")	  ;
	private JMenuItem save 	= new JMenuItem("Save")	  ;
	private JMenuItem saveto= new JMenuItem("Save as");
	private JMenuItem exit 	= new JMenuItem("Exit")	  ;
	
	private JMenuItem copy 	= new JMenuItem("Copy")   ;
	private JMenuItem paste = new JMenuItem("Paste")  ;
	private JMenuItem cut 	= new JMenuItem("Cut")    ;
//	private JMenuItem del 	= new JMenuItem("Del")    ;
	private JMenuItem find 	= new JMenuItem("Find")   ;
	private JMenuItem next 	= new JMenuItem("Next")   ;
	private JMenuItem replac= new JMenuItem("Replace");
	
	private JMenuItem font 	= new JMenuItem("Font")		 ;
	private JMenuItem fore 	= new JMenuItem("FontColor") ;
	private JMenuItem back 	= new JMenuItem("Background");
	private JRadioButtonMenuItem wrap 	= new JRadioButtonMenuItem("AutoWrap")	 ;
	
	private JMenuItem blank  = new JMenuItem("NewWindow");
	private JMenuItem count  = new JMenuItem("WordCount");
	private JMenuItem cmd	 = new JMenuItem("Command")	 ;
	private JMenuItem calc	 = new JMenuItem("Calc")	 ;
	private JMenuItem option = new JMenuItem("Option")	 ;
	
	private JMenuItem topi	= new JMenuItem("Topical")	 ;
	private JMenuItem about	= new JMenuItem("About")	 ;
	
	MenuBars()
	{
		/*
		 设置快捷键
		*/
		news.setAccelerator(KeyStroke.getKeyStroke(new Character('N'),2))	;
		open.setAccelerator(KeyStroke.getKeyStroke(new Character('O'),2))	;
		save.setAccelerator(KeyStroke.getKeyStroke(new Character('S'),2))	;
		saveto.setAccelerator(KeyStroke.getKeyStroke(new Character('S'),3))	;
		exit.setAccelerator(KeyStroke.getKeyStroke(new Character('X'),8))	;
		
		copy.setAccelerator(KeyStroke.getKeyStroke(new Character('C'),2))	;
		paste.setAccelerator(KeyStroke.getKeyStroke(new Character('V'),2))	;
		cut.setAccelerator(KeyStroke.getKeyStroke(new Character('X'),2))	;
//		del.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0))	;
		find.setAccelerator(KeyStroke.getKeyStroke(new Character('F'),2))	;
		next.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0))		;
		replac.setAccelerator(KeyStroke.getKeyStroke(new Character('R'),2)) ;
		
		wrap.setAccelerator(KeyStroke.getKeyStroke(new Character('W'),2))	;
		font.setAccelerator(KeyStroke.getKeyStroke(new Character('T'),2))	;
		
		blank.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0))		;
		option.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,0))		;
		about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0))		;
		
		/*
		 设置键盘助记符
		*/
		file.setMnemonic('F')	;
		edit.setMnemonic('E')	;
		view.setMnemonic('V')	;
		tool.setMnemonic('T')	;
		help.setMnemonic('H')	;
		
		news.setMnemonic('N')	;
		open.setMnemonic('O')	;
		save.setMnemonic('S')	;
		saveto.setMnemonic('A')	;
		exit.setMnemonic('X')	;
		
		copy.setMnemonic('C')	;
		paste.setMnemonic('P')	;
		cut.setMnemonic('U')	;
//		del.setMnemonic('D')	;
		find.setMnemonic('F')	;
		next.setMnemonic('N')	;
		replac.setMnemonic('R') ;
		
		font.setMnemonic('F')	;
		fore.setMnemonic('C')	;
		back.setMnemonic('B')	;
		wrap.setMnemonic('W')	;
		
		blank.setMnemonic('W')	;
		count.setMnemonic('C')	;
		cmd.setMnemonic('M')	;
		option.setMnemonic('O')	;
		
		topi.setMnemonic('T')	;
		about.setMnemonic('A')	;
		
		saveto.setDisplayedMnemonicIndex(5);
		blank.setDisplayedMnemonicIndex(3) ;
		
		/*
		 添加菜单项
		*/
		file.add(news)		;
		file.add(open)		;
		file.addSeparator() ;
		file.add(save)		;
		file.add(saveto)	;		
		file.addSeparator() ;
		file.add(exit)		;
		
		edit.add(copy)		;
		edit.add(paste)		;
		edit.add(cut)		;
//		edit.add(del)		;
		edit.addSeparator()	;
		edit.add(find)		;
		edit.add(next)		;
		edit.add(replac)	;
		
		view.add(font)		;
		view.add(fore)		;
		view.add(back)		;
		view.addSeparator() ;
		view.add(wrap)		;
		
		tool.add(blank)		;
		tool.add(count)		;
		tool.addSeparator()	;
		tool.add(calc)		;
		tool.add(cmd)		;
		tool.addSeparator()	;
		tool.add(option)	;
		
		help.add(topi)		;
		help.add(about)		;
		
		/*
		 添加菜单项事件监听
		*/
		news.addActionListener(new FileAction())  ;
		open.addActionListener(new FileAction())  ;
		save.addActionListener(new FileAction())  ;
		saveto.addActionListener(new FileAction());
		exit.addActionListener(new FileAction())  ;
		
		copy.addActionListener(new EditAction())  ;
		paste.addActionListener(new EditAction()) ;
		cut.addActionListener(new EditAction())   ;
//		del.addActionListener(new EditAction())   ;
		find.addActionListener(new EditAction())  ;
		next.addActionListener(new EditAction())  ;
		replac.addActionListener(new EditAction());
		
		font.addActionListener(new ViewAction())  ;
		fore.addActionListener(new ViewAction())  ;
		back.addActionListener(new ViewAction())  ;
		wrap.addActionListener(new ViewAction())  ;
		
		blank.addActionListener(new ToolAction()) ;
		count.addActionListener(new ToolAction()) ;
		cmd.addActionListener(new ToolAction())   ;
		calc.addActionListener(new ToolAction())  ;
		option.addActionListener(new ToolAction());
		
		topi.addActionListener(new HelpAction())  ;
		about.addActionListener(new HelpAction()) ;
		
		/*
		 添加菜单
		*/
		add(file);
		add(edit);
		add(view);
		add(tool);
		add(help);
	}	
}
/**
 文本区域类
*/
class TextPane extends JPanel
{
	private JTextArea[] text = new JTextArea[N]		;
	private JScrollPane[] scoll = new JScrollPane[N];
	private Font font    = new Font("楷体",1,18)	;
	private Color back   = Color.white	;
	private Color fore   = Color.black	;
	private boolean wrap = false		;

	TextPane()
	{
		text[count]  = new JTextArea();
		scoll[count] = new JScrollPane(text[count]);			
		
		text[count].getDocument().addDocumentListener(new TextListener());
		text[count].setFont(font)	   ;
		text[count].setBackground(back);
		text[count].setForeground(fore);
		text[count].setLineWrap(wrap)  ;
		
		setLayout(new BorderLayout());
		add(scoll[count],"Center") ;
	}
	/*
	 获取文本区域
	*/
	public JTextArea getArea()
	{
		return text[current];	
	}
}
/**
 file菜单监听器
*/
class FileAction implements ActionListener
{
	private int returnVar;
	private String str   ;
	private char[] buffer;
	private FileReader reader;
	private FileWriter writer;
	private File[] files = new File[N];
	private JFileChooser chooser = new JFileChooser();
	
	public void actionPerformed(ActionEvent e)
	{
		if(e.getActionCommand() == "New")
		{
			count++;
			if(count < 10)
			{
				textPane[count] = new TextPane()				;
				tab.add(textPane[count],"untitled-"+(count+1))	;
			}	
		}
		if(e.getActionCommand() == "Open")
		{
			returnVar = chooser.showOpenDialog(frame);
			if(returnVar == JFileChooser.APPROVE_OPTION)
				{
					files[current] = chooser.getSelectedFile();
					tab.setTitleAt(current,files[current].getName());
					buffer = new char[(int)files[current].length()];	
					try
					{
						reader = new FileReader(files[current]);
						while(reader.read(buffer) != -1);
						str = new String(buffer);
						textPane[current].getArea().setText(str);
						reader.close();
					}
					catch(IOException ie)
					{
						System.err.println(ie.toString());	
					}
					if(NUM == 5)
					{
						menuBar.file.insertSeparator(NUM++);		
						menuBar.file.add(new JMenuItem(files[current].toString()),NUM)	;		
					}
					else
						menuBar.file.add(new JMenuItem(files[current].toString()),NUM++);
				}		
		}	
		if(e.getActionCommand() == "Save")
		{
			if(files[current] == null)
			{
				returnVar = chooser.showSaveDialog(frame);
				if(returnVar == JFileChooser.APPROVE_OPTION)
				{
					files[current] = chooser.getSelectedFile();
					tab.setTitleAt(current,files[current].getName());
					str = textPane[current].getArea().getText();
					try
					{
						writer = new FileWriter(files[current]);
						writer.write(str);
						writer.close();
						tab.setTitleAt(current,tab.getTitleAt(current).replace('*','\0').trim());
					}
					catch(IOException ie)
					{
						System.err.println(ie.toString());
					}
				}
			}
			else
			{
				tab.setTitleAt(current,files[current].getName());
				str = textPane[current].getArea().getText();
				try
				{
					writer = new FileWriter(files[current]);
					writer.write(str);
					writer.close();
					tab.setTitleAt(current,tab.getTitleAt(current).replace('*','\0').trim());
				}
				catch(IOException ie)
				{
					System.err.println(ie.toString());
				}	
			}
		}
		if(e.getActionCommand() == "Save as")
		{
			chooser.setDialogTitle("save as...");
			returnVar = chooser.showSaveDialog(frame);
			if(returnVar == JFileChooser.APPROVE_OPTION)
			{
				files[current] = chooser.getSelectedFile();
				tab.setTitleAt(current,files[current].getName());
				str = textPane[current].getArea().getText();
				try
				{
					writer = new FileWriter(files[current]);
					writer.write(str);
					writer.close();
					tab.setTitleAt(current,tab.getTitleAt(current).replace('*','\0').trim());
				}
				catch(IOException ie)
				{
					System.err.println(ie.toString());
				}	
			}
		}
		if(e.getActionCommand() == "Exit")
		{
			System.exit(0);
		}		
	}	
}
/**
 edit菜单监听器
*/
class EditAction implements ActionListener
{
	FindOption findOption = new FindOption();
	public void actionPerformed(ActionEvent e)
	{
		if(e.getActionCommand() == "Copy")
		{
			textPane[current].getArea().copy();
		}
		if(e.getActionCommand() == "Paste")
		{
			textPane[current].getArea().paste();
		}
		if(e.getActionCommand() == "Cut")
		{
			textPane[current].getArea().cut();
		}
//		if(e.getActionCommand() == "Del")
//		{
//			textPane[current].getArea().getSelectedText().remove();.
//		}
		if(e.getActionCommand() == "Find")
		{
			findOption.setVisible(true);
		}
		if(e.getActionCommand() == "Next")
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -