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

📄 textframe.java

📁 这是一个汉诺塔程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import   javax.swing.event.*;   
import   javax.swing.text.*;
import javax.swing.undo.*;
//类TextFrame

public class TextFrame extends JFrame implements KeyListener{
	int len=1;
	int totLine=0;
	File file=null;
	JFileChooser jfc=new JFileChooser();
	JEditorPane mainContain=new JEditorPane();
	JMenuBar jmb=new JMenuBar();
	JDialog jd=new JDialog(this); 
	JTextArea errPane = new JTextArea ((int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/100,
			(int) Toolkit.getDefaultToolkit().getScreenSize().getWidth());
	MyEditorKit     kit=new   MyEditorKit();
	
	JTextArea linePane=new JTextArea(24*(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/25,3);
	String lineNumber="1\n";
	Container   c;
	JScrollPane jsp;
	JPanel cntPn;
	//UndoableEditListener ue=new UndoHander();
	UndoManager undo = new UndoManager();
	int StartFindPos=0,a=0,b=0;
	JPopupMenu popup;
	JMenuItem popup_item[];
	JDialog jd1=new JDialog(new JFrame(),"关于我们",false); 
	JDialog jd2=new JDialog(new JFrame(),"HTMLEditor帮助文档",false);
	
	public void keyPressed(KeyEvent e){
		if (e.getKeyCode()==KeyEvent.VK_ENTER){
			len++;
			
		}
		else
			if (e.getKeyCode()==KeyEvent.VK_BACK_SPACE||e.getKeyCode()==KeyEvent.VK_DELETE){
				StringTokenizer stk=new StringTokenizer(mainContain.getText(),"\n");
				if (stk.countTokens()!=len){
					len=stk.countTokens();
					
				}
			}
		setLineNumber();
	}
	private void setLineNumber(){
		lineNumber="";
		for (int i=1;i<=len;i++)
		lineNumber=lineNumber+""+i+"\n";
		linePane.setText(lineNumber);
	}
	public void keyReleased(KeyEvent e){
	}
	public void keyTyped(KeyEvent e){
	}
	//类的构造函数
	public TextFrame(){
		super("My Checker");
		try{
			  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		  }
		  catch(Exception e){
			  
		  }
		setSize((int) Toolkit.getDefaultToolkit().getScreenSize().getWidth(),
				24*(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/25);
		linePane.setEditable(false);
		linePane.setEditable(false);
		popup=new JPopupMenu();
		String popupOperation[]={"撤销(U)","剪贴(T)","复制(C)","粘贴(P)","删除(D)","全选(A)"};
		  char popupMnemonic[]={'U','T','C','P','D','A'};
		  popup_item=new JMenuItem[popupOperation.length];
		  for(int count=0;count<popupOperation.length;count++)
		  {
		   popup_item[count]=new JMenuItem(popupOperation[count]);
		   popup_item[count].setBackground(Color.white);
		   popup_item[count].setFont(new Font("Monospaced",Font.PLAIN,12));
		   popup_item[count].setMnemonic(popupMnemonic[count]);
		   popup_item[count].addActionListener(action);
		   if(count==1||count==5)  popup.addSeparator();
		   	popup.add(popup_item[count]);
		  }
		mainContain.addKeyListener(this);
		mainContain.setSelectedTextColor(Color.DARK_GRAY);
		mainContain.addMouseListener(
			    new MouseAdapter(){
			     public   void   mousePressed(MouseEvent   event)
			     { 
			      if(event.getButton()==event.BUTTON3)
			       checkForTriggerEvent(event);
			               
			     }           
			       
			     public   void   mouseReleased(MouseEvent   event)
			     {       
			      if(event.getButton()==event.BUTTON3)
			       checkForTriggerEvent(event);
			     }
			     
			     private void checkForTriggerEvent(MouseEvent event)
			     {
			      if(event.isPopupTrigger())
			       popup.show(mainContain, event.getX(), event.getY());
			     }
			    }
			    );
		c=getContentPane();
		c.setLayout(new   BorderLayout());
		cntPn=new JPanel();
		cntPn.setLayout(new BorderLayout());
		initMenu();
		initToolBar();
		initAboutDialog();
		initJTextArea();
			
		                  mainContain.setFont(new   Font("Courier   New",   Font.PLAIN,   20));   
		                  mainContain.setEditorKitForContentType("text/plain",   kit);   
		                  mainContain.setContentType("text/plain"); 
		                  linePane.setFont(new   Font(null,   Font.PLAIN,   20));
		                  linePane.setRows(0);	
		                  errPane.setFont(new Font("粗体",Font.BOLD,15));
		                  mainContain.addCaretListener(new   CaretListener(){   
		                          public   void   caretUpdate(CaretEvent   e){   
		                          }   
		                  });
		                  cntPn.add(mainContain,BorderLayout.CENTER);
		                  cntPn.add(linePane,BorderLayout.WEST);
		                  jsp=new JScrollPane(cntPn);
		                  jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED );
            
		                  c.add(jsp,   BorderLayout.CENTER); 
		}
	public  void   init(){   
		  TextFrame   App=new   TextFrame();   
		  App.addWindowListener(new   WindowAdapter(){   
		  public   void   windowClosing(WindowEvent   e){   
		  System.exit(0);   
		  }   
		  });   
		   App.setVisible(true);   
		 }   
	
	public  JEditorPane getTextPane(){
		return mainContain;
	}
	public JTextArea getTextArea(){
		return errPane;
	}
	
	//初始化菜单
	void initMenu(){
		JMenu[] menus=new JMenu[]{
				new JMenu("文件(F)"), 
				new JMenu("编辑(E)"), 
				//new JMenu("格式(V)"),
				new JMenu("帮助(H)") 
				}; 
		//以下方法设置快捷键
			menus[0].setMnemonic(KeyEvent.VK_F);
			menus[1].setMnemonic(KeyEvent.VK_E);
			//menus[2].setMnemonic(KeyEvent.VK_V);
			menus[2].setMnemonic(KeyEvent.VK_H);
				JMenuItem menuitems[][]=new JMenuItem[][]{{ 
				new JMenuItem("新建"), 
				new JMenuItem("打开"), 
				new JMenuItem("保存"),
				new JMenuItem("退出") 
				}, 

				{ 
				new JMenuItem("复制"),
				new JMenuItem("剪切"), 
				new JMenuItem("粘贴"),
				new JMenuItem("查找"),
				new JMenuItem("替换"),
				new JMenuItem("全选"),
				//new JMenuItem("撤消"),
				new JMenuItem("删除")
				}, 
				//{
				//	new JMenuItem("自动换行"),
				//	new JMenuItem("字体")
			//	},
				{
				new JMenuItem("帮助主题"),
				new JMenuItem("关于") 
				} 
			};
				//设置加速键,其余各个类似,把它加完
		menuitems[0][0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));
		menuitems[0][1].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));
		menuitems[0][2].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
		menuitems[0][3].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,ActionEvent.ALT_MASK));
		menuitems[1][0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
		menuitems[1][1].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
		menuitems[1][2].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
		menuitems[1][3].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,ActionEvent.CTRL_MASK));
		menuitems[1][4].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,ActionEvent.CTRL_MASK));
		menuitems[1][5].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK));
		//menuitems[1][6].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,ActionEvent.CTRL_MASK));
		menuitems[1][6].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
		menuitems[2][0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,ActionEvent.CTRL_MASK));
		
		
		for (int i=0;i<menus.length;i++){
			jmb.add(menus[i]);
			for (int j=0;j<menuitems[i].length;j++){
				if(i==0&&j==3||i==1&&j==3||i==1&&j==6)
					menus[i].addSeparator();
					menus[i].add(menuitems[i][j]);
				menuitems[i][j].addActionListener(action);
		}
		}
		/*mainContain.getDocument().addUndoableEditListener(ue); 
		if(undo.canUndo()) 
		{ 
			(menuitems[1][6]).setEnabled(false); 
		}*/
		this.setJMenuBar(jmb);
	}
	
	//菜单动作监视者
	ActionListener action=new ActionListener(){
		public void actionPerformed(ActionEvent e){
			JMenuItem mi=(JMenuItem)e.getSource();
			String id=mi.getText();
			if (id.equals("新建")){
				mainContain.setText("");
				len=0;
				setLineNumber();
				file=null;
			}
			if (id.equals("打开")){
				if(file !=null)jfc.setSelectedFile(file);
                int returnVal=jfc.showOpenDialog(TextFrame.this);
                if(returnVal==JFileChooser.APPROVE_OPTION){

                file=jfc.getSelectedFile();
                openFile();
              errPane.setText("");  
              new Parse(mainContain,errPane);//启动检测
				}
			}
			if(id.equals("保存")){
				if (file!=null) saveFile();
				else{
				int returnVal=jfc.showSaveDialog(TextFrame.this);
				if (returnVal==JFileChooser.APPROVE_OPTION){
					file=jfc.getSelectedFile();
					saveFile();
					}
				}
			errPane.setText("");  
			new Parse(mainContain,errPane);//启动检测
			}
				
			else if(id.equals("退出")){
				TextFrame f=new TextFrame();
				int s=JOptionPane.showConfirmDialog(f,"是否需要保存?","结束程序",JOptionPane.YES_NO_CANCEL_OPTION);
				if (s==JOptionPane.YES_OPTION){
						jfc.setSelectedFile(file);
						int returnVal=jfc.showSaveDialog(TextFrame.this);
						if (returnVal==JFileChooser.APPROVE_OPTION){
							file=jfc.getSelectedFile();
							saveFile();}
						System.exit(0);
				}
				if(s==JOptionPane.NO_OPTION){
					System.exit(0);
				}
	               if(s==JOptionPane.CANCEL_OPTION);
		
			}else if(id.equals("剪切")||id.equals("剪贴(T)")){
					mainContain.cut();
			}else if(id.equals("复制")||id.equals("复制(C)")){
					mainContain.copy();
			}else if (id.equals("粘贴")||id.equals("粘贴(P)")){
					mainContain.paste();
			}else if(id.equals("删除")||id.equals("删除(D)")){
				mainContain.cut();
				
			}else if(id.equals("查找")){
				
				try 
				{ 
				final JDialog jd=new JDialog(new JFrame(),"查找",true); 
				GridBagLayout gbl=new GridBagLayout(); 
				GridBagConstraints gbc=new GridBagConstraints(); 
				gbc.weightx=0.5; 
				gbc.weighty=0.5; 
				gbc.gridwidth=1; 
				gbc.gridheight=1; 
				jd.getContentPane().setLayout(gbl); 
				jd.setSize(380,100); 
				jd.setResizable(false); 
				final JTextField jtf=new JTextField(15); 
				JLabel jlFind=new JLabel("查找内容:"); 
				jd.getContentPane().add(jlFind); 
				JButton jbFind=new JButton("查找"); 

				jbFind.addActionListener(new ActionListener() 
				{ 
				public void actionPerformed(ActionEvent efind) 
				{ 
				String strA=mainContain.getText(); 
				String strB=jtf.getText(); 
				if(a>=0) 
				{ 
				a=strA.indexOf(strB,StartFindPos); 

				b=strB.length(); 
				StartFindPos=a+b; 
				if(a==-1) 
				{ 
				JOptionPane.showMessageDialog(null, "没有您要查找的信息", "查找结果",1); 
				a=0; 
				StartFindPos=0; 
				} 
				mainContain.select(a,StartFindPos); 
				} 
				} 
				} 
				); 
				JButton jbCancel=new JButton("取消"); 
				jbCancel.addActionListener(new ActionListener() 
				{ 
				public void actionPerformed(ActionEvent ejb) 
				{ 
				jd.dispose(); 
				} 
				} 
				); 
				jd.getContentPane().add(jtf); 
				jd.getContentPane().add(jbFind); 
				jd.getContentPane().add(jbCancel); 
//				jd.setResizable(false); 
				jd.setLocation(240,200); 
				jd.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
				jd.setVisible(true); 
				} 

⌨️ 快捷键说明

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