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

📄 mytxt.java

📁 东西比较杂
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/**
 * 
 */
package com.tiankong;

/**
 * @author Administrator
 *
 */
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.filechooser.FileFilter;
import java.io.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.DataFlavor;
import javax.swing.undo.*;


public class MyTxt extends JFrame implements ActionListener{
	int position;
	int endposition;
	String savesearch;
	boolean selectjr;
	boolean daxiao;
	boolean isNewText;
	String OldText="";
	String Filename;
	boolean NotSave=true;
	String tihuanText;
	boolean tihuandaxiao;
	JPopupMenu jpm=new JPopupMenu();
	JMenuItem jp_Undo=new JMenuItem("撤销(Z)",'Z');
	JMenuItem jp_Cut=new JMenuItem("剪切(X)",'X');
	JMenuItem jp_Copy=new JMenuItem("复制(C)",'C');
	JMenuItem jp_Parst=new JMenuItem("粘贴(V)",'V');
	JMenuItem jp_Del=new JMenuItem("删除(L)",'L');
	JMenuItem jp_SelectAll=new JMenuItem("全选(A)",'A');
	Clipboard cb;
	Toolkit t=Toolkit.getDefaultToolkit();
	JPanel status=new JPanel();
	JLabel statuslabel=new JLabel("My Notepad,按F1可获得帮助");
	JMenuBar jmb=new JMenuBar();
	JMenu jm1=new JMenu("文件(F)");
	JMenu jm2=new JMenu("编辑(E)");
	JMenu jm3=new JMenu("格式(O)");
	JMenu jm4=new JMenu("查看(V)");
	JMenu jm5=new JMenu("帮助(H)");
	JMenuItem ji1=new JMenuItem("新建(N)",'N');
	JMenuItem ji2=new JMenuItem("打开(O)...",'O');
	JMenuItem ji3=new JMenuItem("保存(S)",'S');
	JMenuItem ji4=new JMenuItem("另存为(A)...",'A');
	JMenuItem ji5=new JMenuItem("页面设置(U)...",'U');
	JMenuItem ji6=new JMenuItem("打印(P)...",'P');
	JMenuItem ji7=new JMenuItem("退出(X)",'X');
	JMenuItem ji8=new JMenuItem("撤销(Z)",'Z');
	JMenuItem ji9=new JMenuItem("剪切(X)",'X');
	JMenuItem ji10=new JMenuItem("复制(C)",'C');
	JMenuItem ji11=new JMenuItem("粘贴(V)",'V');
	JMenuItem ji12=new JMenuItem("删除(L)",'L');
	JMenuItem ji13=new JMenuItem("查找(F)...",'F');
	JMenuItem ji14=new JMenuItem("查找下一个(N)",'N');
	JMenuItem ji15=new JMenuItem("替换(R)...",'R');
	JMenuItem ji16=new JMenuItem("转到(G)...",'G');
	JMenuItem ji17=new JMenuItem("全选(A)",'A');
	JMenuItem ji18=new JMenuItem("时间/日期",'D');
	JCheckBoxMenuItem ji19=new JCheckBoxMenuItem("自动换行(W)");
	JMenuItem ji20=new JMenuItem("字体设置(F)...",'F');
	JCheckBoxMenuItem ji21=new JCheckBoxMenuItem("状态栏(S)");
	JMenuItem ji22=new JMenuItem("帮助主题(H)",'H');
	JMenuItem ji23=new JMenuItem("关于记事本(A)",'A');
	JScrollPane jsp=new JScrollPane();
	JTextArea Txt=new JTextArea();
	Font textFont=new Font("宋体",Font.PLAIN,12);
	UndoManager undo = new UndoManager(); 
	
	public MyTxt(){
		savesearch="";
		status.setLayout(new FlowLayout(FlowLayout.LEFT));
		isNewText=false;
		cb=t.getSystemClipboard();
		jm1.setMnemonic('F');
		jm2.setMnemonic('E');
		jm3.setMnemonic('O');
		jm4.setMnemonic('V');
		jm5.setMnemonic('H');
		ji1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
		ji1.addActionListener(this);
		jm1.add(ji1);
		ji2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
		ji2.addActionListener(this);
		jm1.add(ji2);
		ji3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
		ji3.addActionListener(this);
		jm1.add(ji3);
		ji4.addActionListener(this);
		jm1.add(ji4);
		jm1.addSeparator();
		ji5.addActionListener(this);
		jm1.add(ji5);
		ji6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
		ji6.addActionListener(this);
		jm1.add(ji6);
		jm1.addSeparator();
		ji7.addActionListener(this);
		jm1.add(ji7);
		
		ji8.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
		ji8.addActionListener(this);
		ji8.setEnabled(false);
		ji9.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
		ji9.addActionListener(this);
		ji9.setEnabled(false);
		ji10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
		ji10.addActionListener(this);
		ji10.setEnabled(false);
		ji11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
		ji11.addActionListener(this);
		ji12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
		ji12.addActionListener(this);
		ji12.setEnabled(false);
		ji13.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
		ji13.addActionListener(this);
		ji14.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
		ji14.addActionListener(this);
		ji15.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));
		ji15.addActionListener(this);
		ji16.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK));
		ji16.setEnabled(false);
		ji17.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
		ji17.addActionListener(this);
		ji18.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
		ji18.addActionListener(this);
		jm2.add(ji8);
		jm2.addSeparator();
		jm2.add(ji9);
		jm2.add(ji10);
		jm2.add(ji11);
		jm2.add(ji12);
		jm2.addSeparator();
		jm2.add(ji13);
		jm2.add(ji14);
		jm2.add(ji15);
		jm2.add(ji16);
		jm2.addSeparator();
		jm2.add(ji17);
		jm2.add(ji18);
		
		ji19.setState(true);
		Txt.setWrapStyleWord(true);
		ji19.setMnemonic('W');
		ji19.addChangeListener(new ChangeListener(){
			public void stateChanged(ChangeEvent e){
				 if(ji19.getState()){
					 //jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
					 Txt.setLineWrap(true);
					 //这里不用再设滚动了,因为Txt.setLineWrap已经弄了
				 }
				 else{
					 //jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
					 Txt.setLineWrap(false);
				 }
			}
		});
		ji20.addActionListener(this);
		jm3.add(ji19);
		jm3.addSeparator();
		jm3.add(ji20);
		ji21.setMnemonic('S');
		status.add(statuslabel);
		ji21.addChangeListener(new ChangeListener(){
			public void stateChanged(ChangeEvent e){
				if(ji21.getState())
					status.setVisible(true);
				else
					status.setVisible(false);
			}
		});
		status.setVisible(true);
		jm4.add(ji21);
		ji21.setSelected(true);
		ji22.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
		ji22.addActionListener(this);
		ji23.addActionListener(this);
		jm5.add(ji22);
		jm5.addSeparator();
		jm5.add(ji23);
		
		jmb.add(jm1);
		jmb.add(jm2);
		jmb.add(jm3);
		jmb.add(jm4);
		jmb.add(jm5);
		Txt.addMouseListener(
				new MouseAdapter(){
					public void mousePressed(MouseEvent e)
					{
						checkForTriggerEvent(e);
					}
					
					public void mouseReleased(MouseEvent e)
					{
						checkForTriggerEvent(e);
					}
					
					private void checkForTriggerEvent(MouseEvent e)
					{
						if(/*e.isPopupTrigger()*/e.getButton()==MouseEvent.BUTTON3)
							jpm.show(e.getComponent(), e.getX(), e.getY());
						checkMenuItemEnabled();		//设置剪切、复制、粘贴、删除等功能的可用性
					}//偷来的...但是有点局限性,当双击的时候会选择文本,但是
				});
		Txt.setFont(textFont);
		Txt.setLineWrap(true);
		Txt.getDocument().addUndoableEditListener(new UndoableEditListener(){
			public void undoableEditHappened(UndoableEditEvent e){
				undo.addEdit(e.getEdit()); 
			}
		});//使用他可以知道之情所做的是什么操作,然后返回给undo,让undo.undo使用
		Txt.getDocument().addDocumentListener(new DocumentListener(){
			public void changedUpdate(DocumentEvent e){
				ji8.setEnabled(true);
				jp_Undo.setEnabled(true);
			}
			public void insertUpdate(DocumentEvent e){
				ji8.setEnabled(true);
				jp_Undo.setEnabled(true);
			}
			public void removeUpdate(DocumentEvent e){
				ji8.setEnabled(true);
				jp_Undo.setEnabled(true);
			}
		});//写这个监听可以确定撤销是否可用
		jsp.getViewport().add(Txt);
		jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		jp_Undo.addActionListener(this);
		jp_Cut.addActionListener(this);
		jp_Copy.addActionListener(this);
		jp_Parst.addActionListener(this);
		jp_Del.addActionListener(this);
		jp_SelectAll.addActionListener(this);
		jp_Undo.setEnabled(false);
		jp_Cut.setEnabled(false);
		jp_Copy.setEnabled(false);
		jp_Parst.setEnabled(false);
		jp_Del.setEnabled(false);
		jpm.add(jp_Undo);
		jpm.addSeparator();
		jpm.add(jp_Cut);
		jpm.add(jp_Copy);
		jpm.add(jp_Parst);
		jpm.add(jp_Del);
		jpm.addSeparator();
		jpm.add(jp_SelectAll);
		this.setTitle("罗识识的记事本");
		this.setJMenuBar(jmb);
		this.add(jpm);
		this.add(jsp,BorderLayout.CENTER);
		this.add(status,BorderLayout.SOUTH);
		this.setSize(800,600);

		this.setLocation(120,90);
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				mexit();
			}
		});
		//对于JFrame如果没有添加上面这句话也可以退出,但是实际上进程并没有退出......javaw.exe存在
		this.setVisible(true);
		checkMenuItemEnabled();
		Txt.requestFocus();
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try 
		{ 
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
		}
		catch(Exception e) { 
		} 
		new MyTxt();
	}
	
	class MyFileFilter extends FileFilter{
		String strFilter;
		String strDescription;
		public MyFileFilter(){
			this.strDescription="我的所有文件";
			this.strFilter="";//设置为空,代表的意思就是所有文件
		}
		public MyFileFilter(String strFilter,String strDescription){
			this.strFilter=strFilter;
			this.strDescription=strDescription;
		}
		public String getDescription(){
			return strDescription;
		}
		public boolean accept(File f){
			String fileName=f.getAbsolutePath();
			if(f.isDirectory())return true;
			if(fileName.toUpperCase().endsWith(strFilter.toUpperCase()))
				return true;
			else 
				return false;
		}
	}
	public void mexit(){
		if(!OldText.equals(Txt.getText())){
			int result=JOptionPane.showConfirmDialog(MyTxt.this, "文件未保存,是否要保存??","文件是否保存?",JOptionPane.YES_NO_CANCEL_OPTION);
			if(result==JOptionPane.YES_OPTION){
				JFileChooser jfc=new JFileChooser();
				jfc.setDialogTitle("保存文件");
				//jfc.changeToParentDirectory();
				jfc.setApproveButtonText("保存");
				jfc.addChoosableFileFilter(new MyFileFilter(".txt","txt文本文件"));
				jfc.addChoosableFileFilter(new MyFileFilter(".java","java文本文件"));
				jfc.setFileFilter(new MyFileFilter());
				if(jfc.showSaveDialog(MyTxt.this)==JFileChooser.APPROVE_OPTION){
					File ft=jfc.getSelectedFile();
					if(true){
					//if(jfc.getSelectedFile().getName().toUpperCase().endsWith(".txt".toUpperCase())){
						try{
							FileWriter f=new FileWriter(ft);//用于实现字符流
							BufferedWriter fs=new BufferedWriter(f);
							
							fs.write(Txt.getText(),0,Txt.getText().length());
							fs.flush();
							fs.close();
							System.exit(0);
						}catch(FileNotFoundException ex){
							JOptionPane.showMessageDialog(null, "文件未找到!!");
							return;
						}catch(IOException ey){
							JOptionPane.showMessageDialog(null, "保存出错");
							return;
						}
					}
					else{
						JOptionPane.showMessageDialog(jfc, "请正确输入文件名,文件未保存!!!");
					}
				}
			}
			else if(result==JOptionPane.NO_OPTION){
				System.exit(0);
			}
		}
		else{
			System.exit(0);
		}
	}
	class MyFontDialog implements ListSelectionListener{
		JTextField simple;
		int index;
		Font fontSimple;
		String font;
		String style;
		String size;
		int style1;
		JDialog fontDialog=new JDialog(MyTxt.this,"字体设置",true);
		JPanel fontsimple=new JPanel();
		JLabel fontNames=new JLabel("字体(F):");
		JLabel fontStyle=new JLabel("字形(Y):");
		JLabel fontSize=new JLabel("大小(S):");
		JTextField fontNamesText=new JTextField(15);
		JTextField fontStyleText=new JTextField(10);
		JTextField fontSizeText=new JTextField(10);
		JList fontNamesScroll=new JList();
		JList fontStyleScroll=new JList();
		JList fontSizeScroll=new JList();
		JButton right=new JButton("确定");
		JButton cancel=new JButton("取消");
		JScrollPane namesScroll=new JScrollPane(fontNamesScroll);
		JScrollPane styleScroll=new JScrollPane(fontStyleScroll);
		JScrollPane sizeScroll=new JScrollPane(fontSizeScroll);
		GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
		String [] fontAllNames;
		String[] fontStyleList={"常规","斜体","粗体","粗斜体"};
		String[] fontSizeList={"8","9","10","12","14","18","20","36"};
		public MyFontDialog(final JTextArea mt){
			index=0;
			fontNames.setDisplayedMnemonic('F');
			fontStyle.setDisplayedMnemonic('Y');
			fontSize.setDisplayedMnemonic('S');
			Container con=fontDialog.getContentPane();
			con.setLayout(null);
			
			font=mt.getFont().getFontName();
			fontNamesText.setText(font);
			if(mt.getFont().getStyle()==Font.PLAIN){
				style="常规";
			}
			else if(mt.getFont().getStyle()==Font.BOLD){
				style="粗体";
			}
			else if(mt.getFont().getStyle()==Font.ITALIC){
				style="斜体";
			}
			else{
				style="粗斜体";
			}
			fontStyleText.setText(style);
			size=Integer.valueOf(mt.getFont().getSize()).toString();
			fontSizeText.setText(size);
			
			fontNames.setBounds(10,5,140,20);
			fontStyle.setBounds(155,5,120,20);

⌨️ 快捷键说明

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