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

📄 texteditor.java

📁 这是我编的一个文本编辑器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.regex.*;
public class TextEditor extends JFrame implements ActionListener
{
	private String[] dic=new String[13792];
	private JTextArea text=new JTextArea();                    //用来显示文件内容
	private String textContent=text.getText(),
	                changeContent=null;
	private JScrollPane textScroll;                                     //滚动条
	private JFileChooser jFileChooser=new JFileChooser();                //显示文件名                                          
	private JFrame  searchJFrame;                                    //用来显示替换对话框	                             
	//下面是它们(查找与替换)的一些组建
	private JTextField findText;
	private JTextField replaceText;
	private JButton jbFind,jbNext,jbPrevious,jbReplace,jbReplaceAll,jbExit;
	private JCheckBox jcbIgnoreCase;    
	private boolean ignoreCase,   //查找时是否区分大小写
	                isFind,
	                findNext=true;       //向下查找
	private int index=0;
	DefaultHighlighter hl =  new DefaultHighlighter();
	//下面是用来标记颜色的,红色是用来标记错误的,而蓝色是用来标记双击选中单词的背景的。
	DefaultHighlighter.DefaultHighlightPainter hp = new DefaultHighlighter.DefaultHighlightPainter(Color.red);
	DefaultHighlighter.DefaultHighlightPainter hpBlue = new DefaultHighlighter.DefaultHighlightPainter(Color.blue);
	JPopupMenu menu=new JPopupMenu();
	
	public TextEditor()
	{
		int i=0;
		try
		{
			BufferedReader inputStream=new BufferedReader(new FileReader("dic.txt"));
			String line=inputStream.readLine();
			while(line!=null)
			{
				dic[i]=line;
				i++;
				line=inputStream.readLine();
			}
			inputStream.close();
		}
		catch(FileNotFoundException e){}
		catch(IOException e){}
		JMenuItem jmiOpen,jmiSave,jmiNew,jmiExit,jmiSearch,jmiAbout,jmiCheck,
	                  jmiCopy,jmiCut,jmiPaste,jmiAll,jmiRefush,jmiSaveAs;
		setTitle("文本编辑器---未命名");
		
		JMenuBar jmb=new JMenuBar();
		setJMenuBar(jmb);
		
		JMenu documentMenu=new JMenu("文件");
		documentMenu.setMnemonic('o');
		jmb.add(documentMenu);
		
		JMenu searchMenu=new JMenu("搜索"); 
		searchMenu.setMnemonic('f');
		jmb.add(searchMenu);
		
		JMenu editMenu=new JMenu("编辑"); 
		editMenu.setMnemonic('f');
		jmb.add(editMenu);
		
		JMenu helpMenu=new JMenu("帮助"); 
		helpMenu.setMnemonic('h');
		jmb.add(helpMenu);
		
		text.setLineWrap(true);
		text.setWrapStyleWord(true);
		
		textScroll=new JScrollPane(text);
		
	//文件菜单		
		documentMenu.add(jmiNew=new JMenuItem("新建"));
		documentMenu.add(jmiOpen=new JMenuItem("打开"));
		documentMenu.add(jmiSave=new JMenuItem("保存"));
		documentMenu.addSeparator();
		documentMenu.add(jmiExit=new JMenuItem("退出"));
	
	//帮助菜单	
		helpMenu.add(jmiAbout=new JMenuItem("关于"));
		
		//查找菜单
		searchMenu.add(jmiSearch=new JMenuItem("查找与替换"));
		jmiSearch.setActionCommand("搜索");
		documentMenu.addSeparator();
		searchMenu.add(jmiCheck=new JMenuItem("查错"));
		
		
		//编辑菜单
		editMenu.add(jmiRefush=new JMenuItem("刷新"));
		editMenu.add(jmiAll=new JMenuItem("全选"));
		editMenu.addSeparator();
		editMenu.add(jmiCopy=new JMenuItem("复制"));
		editMenu.add(jmiCut=new JMenuItem("剪切"));
		editMenu.add(jmiPaste=new JMenuItem("粘贴"));
		
		//设置热键
		jmiNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));
	    jmiOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));
		jmiSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
		jmiExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,ActionEvent.CTRL_MASK));
		jmiAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.ALT_MASK));
		jmiCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
		jmiCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,ActionEvent.CTRL_MASK));
		jmiPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
		jmiSearch.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,ActionEvent.CTRL_MASK));		
		
		//创建查找,替换对话框
        searchJFrame=new JFrame();  	
		JPanel rpButton=new JPanel();
		rpButton.setLayout(new GridLayout(3,3));
		rpButton.add(jbFind=new JButton("查找"));
		rpButton.add(jbReplace=new JButton("替换一个"));
		rpButton.add(jbPrevious=new JButton("上一个"));
		rpButton.add(jbReplaceAll=new JButton("全部替换"));
		rpButton.add(jbNext=new JButton("下一个"));
		rpButton.add(jbExit=new JButton("退出"));
		JPanel rpPanel=new JPanel();
		rpPanel.setLayout(new GridLayout(2,2));
		JPanel j=new JPanel();
		j.add(new JLabel("查找内容"));
		j.add(findText=new JTextField("",20));
		JPanel k=new JPanel();
		k.add(new JLabel("替换为"));
		k.add(replaceText=new JTextField("",20));
		rpPanel.add(j);
		rpPanel.add(k);
		searchJFrame.setLayout(new BorderLayout());
		searchJFrame.getContentPane().add(rpPanel,BorderLayout.NORTH);
		searchJFrame.getContentPane().add(rpButton,BorderLayout.SOUTH);
		searchJFrame.getContentPane().add(jcbIgnoreCase=new JCheckBox("区分大小写"),BorderLayout.CENTER);
		searchJFrame.setSize(350,200);
		searchJFrame.setTitle("查找与替换");
		
		//创建工具栏
		JToolBar tool=new JToolBar();
		JButton New =new JButton("新建",new ImageIcon("Icon/new.jpg")),
		        open=new JButton("打开",new ImageIcon("Icon/open.jpg")),
		        save=new JButton("保存",new ImageIcon("Icon/save.jpg")),
		        copy=new JButton("复制",new ImageIcon("Icon/copy.jpg")),
		        cut=new JButton("剪切",new ImageIcon("Icon/cut.jpg")),
		        paste=new JButton("粘贴",new ImageIcon("Icon/paste.jpg")),
		        find=new JButton("搜索",new ImageIcon("Icon/find.jpg")),
		        check=new JButton("查错",new ImageIcon("Icon/check.jpg"));
		New.setHorizontalTextPosition(SwingConstants.CENTER);
		open.setHorizontalTextPosition(SwingConstants.CENTER);
		save.setHorizontalTextPosition(SwingConstants.CENTER);
		copy.setHorizontalTextPosition(SwingConstants.CENTER);
		cut.setHorizontalTextPosition(SwingConstants.CENTER);
		paste.setHorizontalTextPosition(SwingConstants.CENTER);
		find.setHorizontalTextPosition(SwingConstants.CENTER);
		check.setHorizontalTextPosition(SwingConstants.CENTER);
		
		tool.add(New);
		tool.add(open);
		tool.add(save);
		tool.add(copy);
		tool.add(cut);
		tool.add(paste);
		tool.add(find);
		tool.add(check);
		
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(textScroll,BorderLayout.CENTER);
		getContentPane().add(tool,BorderLayout.NORTH);
		
		//注册所有的事件
	
		
		jmiNew.addActionListener(this);
		jmiOpen.addActionListener(this);
		jmiSave.addActionListener(this);
		jmiExit.addActionListener(this);
		
		jmiRefush.addActionListener(this);
		jmiAll.addActionListener(this);
		jmiCopy.addActionListener(this);
		jmiCut.addActionListener(this);
		jmiPaste.addActionListener(this);
		
		jmiSearch.addActionListener(this);
		jmiCheck.addActionListener(this);
		
		jmiAbout.addActionListener(this);
		
		
		jbFind.addActionListener(this);
		jbNext.addActionListener(this);
		jbPrevious.addActionListener(this);
		jbExit.addActionListener(this);
		jbReplace.addActionListener(this);
		jbReplaceAll.addActionListener(this);
		
		jcbIgnoreCase.addActionListener(this);
		
		New.addActionListener(this);
		open.addActionListener(this);
		save.addActionListener(this);
		copy.addActionListener(this);
		cut.addActionListener(this);
		paste.addActionListener(this);
		find.addActionListener(this);
		check.addActionListener(this);
		
		text.addMouseListener(new PopupListener());
		addMouseListener(new PopupListener());
	} 
	
	//侦听所有的事件
	//1.鼠标事件
	class PopupListener extends MouseAdapter 
	{
		public void mousePressed(MouseEvent e) {maybeShowPopup(e);}
		public void mouseReleased(MouseEvent e) {maybeShowPopup(e);}
		private void maybeShowPopup(MouseEvent e)
	    {
	        if(e.getClickCount()==2)
	        {
	        	text.setHighlighter(hl);
	        	try{hl.addHighlight(text.getSelectionStart(),text.getSelectionEnd(),hpBlue);}
	        	catch(Exception ex){}
	        } 
	        if(e.isPopupTrigger()&&!isFind(text.getSelectedText(),0,13791))
	        {
	        	showOpinion();
	        	menu.show(((JTextArea)e.getComponent()), e.getX(), e.getY());
	        }
        }
    }
    
//菜单和按钮事件
	public void actionPerformed(ActionEvent e) 
	{
		String c=e.getActionCommand();
		if(c.equals("查找") &&!findText.getText().equals(""))
		{
			find(findText.getText());
		}
		else if(c.equals("下一个")&&!findText.getText().equals(""))
		{
			findNext=true;
			find(findText.getText());
		}
		else if(c.equals("上一个")&&!findText.getText().equals(""))
		{
			findNext=false;
			find(findText.getText());
		}
		else if(c.equals("替换一个")&&!replaceText.getText().equals("")&&isFind)
		{
			replace();
		}
		else if(c.equals("全部替换")&&!replaceText.getText().equals("")&&isFind)
		{
			replaceAll();
		}
		else if(c.equals("退出"))
		{
			searchJFrame.setVisible(false);
	        text.setText(text.getText());
	        index=0;
		}
		else if(c.equals("新建"))
		{
			newDocument();
		}
		else if(c.equals("打开"))
		{
			open();
		}
		else if(c.equals("保存"))
		{
			save();
		}
		else if(c.equals("复制"))
		{
			text.copy();
		}
		else if(c.equals("剪切"))
		{
			text.cut();
		}
		else if(c.equals("粘贴"))
		{
			text.paste();
		}
	    else if(c.equals("搜索"))
    	{
    		index=0;
   			searchJFrame.setVisible(true);
   		}
		else if(c.equals("查错"))
		{
			check();
		}
	   	else if(c.equals("退出"))
   		{
	   		System.exit(0);
   		}
	   	else if(c.equals("刷新"))
	   	{
	   		text.setHighlighter(hl);
	  		hl.removeAllHighlights();
         }
	   	else if(c.equals("全选"))
	   	{
	   		text.selectAll();
	   	}
	   	else if(c.equals("关于"))
     	{
   			JOptionPane.showMessageDialog(this,"作者:吴悠强\n学号:041251135\n创建日期:2005-06-02",
    			                               "About",JOptionPane.INFORMATION_MESSAGE,new ImageIcon("Icon/about.jpg"));  		
   		}
   		else if(e.getSource() instanceof JCheckBox)
   		{
   			ignoreCase=false;
    		if(jcbIgnoreCase.isSelected())
	    	{

⌨️ 快捷键说明

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