Java编写的文本编辑器(菜鸟作品)

//这是主窗体文件 Wordwin.java
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class Wordwin extends JFrame implements DocumentListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JMenuBar menubar=new JMenuBar();
    JMenu file=new JMenu("文件");
    JMenu edit=new JMenu("编辑");
    JMenu geshi=new JMenu("格式");
    JMenu look =new JMenu("查看");
    JMenu help =new JMenu("帮助");
    JTextArea wordArea=new JTextArea();
    JScrollPane imgScrollPane = new JScrollPane(wordArea);
    String [] str1={"新建","打开","保存","另存为","页面设置","打印","退出"};
    String [] str2={"剪切","复制","粘贴","查找","替换"};
    String [] str3={"自动换行","字体"};
    Font f1=new Font("隶书",Font.PLAIN,15);
    Search d1=new Search();
    Font1 z1=new Font1(); 
    Change c1=new Change();
    int flag=0;
    String source="";
    public static void main(String[] args) {
      JFrame wordwin=new Wordwin();
      wordwin.setVisible(true);
	}
    public Wordwin(){
       c1.set(wordArea);
       z1.set(wordArea);
       setTitle("文本编辑器");
 	   Toolkit kit = Toolkit.getDefaultToolkit();
 	   Dimension screenSize = kit.getScreenSize();//获取屏幕分辨率
 	   setSize(screenSize.width/2,screenSize.height/2);//大小
 	   setLocation(screenSize.width/4,screenSize.height/4);//位置
 	   add(imgScrollPane,BorderLayout.CENTER);
 	   setJMenuBar(menubar);
 	   file.setFont(f1);
 	   edit.setFont(f1);
 	   geshi.setFont(f1);
 	   look.setFont(f1);
 	   help.setFont(f1);
 	   menubar.add(file);
 	   menubar.add(edit);
 	   menubar.add(geshi);
 	   menubar.add(look);
 	   menubar.add(help);
 	   wordArea.getDocument().addDocumentListener(this);
 	   for(int i=0;i<str1.length;i++){
 		  JMenuItem item1= new JMenuItem(str1[i]);
 		  item1.addActionListener(new MyActionListener1());
 		  item1.setFont(f1);
 		  file.add(item1);
 	   }
 	  for(int i=0;i<str2.length;i++){
 		  JMenuItem item2= new JMenuItem(str2[i]);
 		 item2.addActionListener(new MyActionListener1());
 		  item2.setFont(f1);
 		  edit.add(item2);
 	   }
 	 for(int i=0;i<str3.length;i++){
		  JMenuItem item3= new JMenuItem(str3[i]);
		  item3.addActionListener(new MyActionListener1());
		  item3.setFont(f1);
		  geshi.add(item3);
	   }
    }
    public void changedUpdate(DocumentEvent e) {
		flag=1;
	}
	
	public void insertUpdate(DocumentEvent e) {
		flag=1;
	}
	public void removeUpdate(DocumentEvent e) {
		flag=1;
	}
    void open(){
    	FileDialog  filedialog=new FileDialog(this,"打开",FileDialog.LOAD);
    	filedialog.setVisible(true);
    	String path=filedialog.getDirectory();
        String name=filedialog.getFile();
        if(path!=null && name!=null){
        	 FileInputStream file = null;
			try {
				file = new FileInputStream(path+name);
			} catch (FileNotFoundException e) {
				
			}
        	 InputStreamReader put =new InputStreamReader(file);
        	 BufferedReader in=new BufferedReader(put);
        	 String temp="";
        	  String now = null;
			try {
				now = (String)in.readLine();
			} catch (IOException e) {
				
				e.printStackTrace();
			}
        	  while(now!=null){
        	      temp+=now+"
";
        	      try {
					now=(String)in.readLine();
				} catch (IOException e) {
					
					e.printStackTrace();
				}
        	       }

        	   wordArea.setText(temp);
        }
    	
    }

    void save(){
    	FileDialog  filedialog=new FileDialog(this,"保存",FileDialog.SAVE);
    	filedialog.setVisible(true);
    	if(filedialog.getDirectory()!=null && filedialog.getFile()!=null){
    		 OutputStreamWriter out = null;
			try {
				out = new OutputStreamWriter(new FileOutputStream(filedialog.getDirectory()+filedialog.getFile()));
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
    		 try {
				out.write(wordArea.getText());
			} catch (IOException e) {
				e.printStackTrace();
			}
    		 flag=0;
    		 try {
				out.close();
				source=wordArea.getText();
			} catch (IOException e) {
				e.printStackTrace();
			}
    	}
    }
    void newfile(){
    	if(flag==0){
    		wordArea.setText("");
    	}
    	if(flag==1){
    		int m=  JOptionPane.showConfirmDialog(this,"是否保存该文件");
    		if(m==0){
    			save();
    			wordArea.setText("");
    		}
    		
    		if(m==1){ 
    			//System.exit(0);
    			wordArea.setText("");
    			flag=0;
    			}
    	}
    }
    void exit(){
    	if(flag==0){
    		System.exit(0);
    	}
    	if(flag==1){
    		int m=  JOptionPane.showConfirmDialog(this,"是否保存该文件");
    		if(m==0){
    			save();
    		}
    		if(m==1){ 
    			System.exit(0);
    			}
    	}
    }
    class MyActionListener1 implements ActionListener{
    	public void actionPerformed(ActionEvent e) {
    		if(e.getSource()instanceof JMenuItem){
    			if(e.getActionCommand()=="剪切"){
    				wordArea.cut();
    			}
    			if(e.getActionCommand()=="复制"){
    				wordArea.copy();
    			}
    			if(e.getActionCommand()=="粘贴"){
    				wordArea.paste();
    			}
    			if(e.getActionCommand()=="查找"){
    				d1.setVisible(true);
    			}
    			if(e.getActionCommand()=="字体"){
    				z1.setVisible(true);
    			}
    			if(e.getActionCommand()=="替换"){
    				c1.setVisible(true);
    			}
    			if(e.getActionCommand()=="打开"){
    				open();
    			}
    			if(e.getActionCommand()=="保存"){
    				save();
    			}
    			if(e.getActionCommand()=="新建"){
    				newfile();
    			}
    			if(e.getActionCommand()=="退出"){
    				exit();
    			}
    		}
    		
    	}
    	   
}
}

//这是查找替换的实现Change.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Change extends JDialog{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JLabel l1=new JLabel("查找内容");
	JLabel l2=new JLabel("替换为");
	JTextField t1=new JTextField(10);
	JTextField t2=new JTextField(10);
	JButton b1=new JButton("替换");
	JButton b2=new JButton("全部替换");
	JButton b3=new JButton("取消");
	JTextArea a1=new JTextArea();
	Font f1=new Font("隶书",Font.PLAIN,15);
	//int m;
	void set(JTextArea n){
		a1=n;
	}
	public Change(){
		setTitle("替换");
		setSize(500,300);
		setLocation(200,300);
		setLayout(new FlowLayout());
		l1.setFont(f1);
		l2.setFont(f1);
		t1.setFont(f1);
		t2.setFont(f1);
		b1.setFont(f1);
		b2.setFont(f1);
		b3.setFont(f1);
		add(l1);
		add(t1);
		add(l2);
		add(t2);
		add(b1);
		add(b2);
		add(b3);
		b1.addActionListener(new MyActionListener3());
		b2.addActionListener(new MyActionListener3());
		b3.addActionListener(new MyActionListener3());
	}
	class MyActionListener3 implements ActionListener{
		
public void actionPerformed(ActionEvent e2) {
	int m;
	String source=a1.getText();
	String find=t1.getText();
	String change=t2.getText();
			if(e2.getActionCommand()=="取消"){
				setVisible(false);
				t1.setText("");
				t2.setText("");
			}
			if(e2.getActionCommand()=="替换"){
				m=source.indexOf(find,0);
				String s1=source.substring(0,m);
				String s2=source.substring(m+find.length());
				source=s1+change+s2;
				if(m==-1){
					JOptionPane.showMessageDialog(null,"对不起,没找到您要找的内容!");
				}else{
					a1.setText(source);
				}
			}
			if(e2.getActionCommand()=="全部替换"){
				m=-change.length();
				while(true){
					m=source.indexOf(find,m+change.length());
				    if(m==-1)
				    	break;
				    else{
				    String s1=source.substring(0,m);
					String s2=source.substring(m+find.length());
					source=s1+change+s2;
				    }
				}
				a1.setText(source);
			}
			
		}
	}
	
}

//这是改变字体的Font1.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Font1 extends JDialog implements ItemListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JPanel panel1 = new JPanel();
	JPanel panel2 = new JPanel();
	JPanel panel3 = new JPanel();
	JComboBox comboBox1 = new JComboBox();
	JComboBox comboBox2 = new JComboBox();
	JComboBox comboBox3 = new JComboBox();
	JLabel lab1=new JLabel("字体:");
	JLabel lab2=new JLabel("字形:");
	JLabel lab3=new JLabel("字号:");
	String name=new String("宋体");
	Font f1=new Font("隶书",Font.PLAIN,15);
	int style=1;
	int size=12;
	String []array2=new String[]{"常       规","倾        斜","加       粗"};
	String []array3=new String[]{"14","15","15","16","17","18"};
	GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
    String [] fontName=ge.getAvailableFontFamilyNames();
    JButton b1=new JButton("确定");
    JButton b2=new JButton("颜色");
    JTextArea a1=new JTextArea();
    void set(JTextArea n){
		a1=n;
	}
	public Font1(){
		setTitle("字体");
		setSize(500,600);
		setLayout(new FlowLayout());
		//panel1.setLocation(100, 200);
		lab1.setFont(f1);
		lab2.setFont(f1);
		comboBox1.setModel(new DefaultComboBoxModel(fontName));
		comboBox1.setFont(f1);
		for(int i=1;i<fontName.length;i++){
			//comboBox1.setSelectedIndex(i);
			comboBox1.setSelectedItem(fontName);
			//comboBox1.addItem(fontName);
		}
		comboBox2.setModel(new DefaultComboBoxModel(array2));
		comboBox2.setFont(f1);
		for(int i=1;i<array2.length;i++){
			//comboBox2.setSelectedIndex(i);
			comboBox2.setSelectedItem(array2);
			//comboBox2.addItem(array2);
		}
		comboBox3.setModel(new DefaultComboBoxModel(array3));
		comboBox3.setFont(f1);
		for(int i=1;i<array3.length;i++){
			//comboBox2.setSelectedIndex(i);
			comboBox2.setSelectedItem(array3);
			//comboBox3.addItem(array3);
		}
		
		panel1.add(lab1);
		panel1.add(comboBox1);
		panel2.add(lab2);
		panel2.add(comboBox2);
		panel3.add(lab3);
		panel3.add(comboBox3);
		panel3.add(b1);
		panel3.add(b2);
		b2.addActionListener(new MyActionListener3());
		comboBox1.addItemListener(this);
		comboBox2.addItemListener(this);
		comboBox3.addItemListener(this);
		b1.addActionListener(new MyActionListener3());
		add(panel1);
		add(panel2);
		add(panel3);
	}
		public void itemStateChanged(ItemEvent e) {
			if(e.getSource()==comboBox1){
			    name=comboBox1.getSelectedItem().toString();
			}
			if(e.getSource()==comboBox2){
			  String s1=comboBox2.getSelectedItem().toString();
			  if(s1.equals("加粗")){
			  style=Font.BOLD;
			  }
			  if(s1.equals("倾斜")){
				  style=Font.ITALIC;
			  }
			  if(s1.equals("常规")){
				  style=Font.PLAIN;
			  }
			}
			if(e.getSource()==comboBox3){
				 String s2=comboBox3.getSelectedItem().toString();
				 size=Integer.parseInt(s2);
			}
			
		}
		
		class MyActionListener3 implements ActionListener{
			public void actionPerformed(ActionEvent e2) {
				Font f=new Font(name,style,size);
				a1.setFont(f);
				if(e2.getActionCommand()=="颜色"){
					setcolor();
				}
			}
		}
		 void setcolor(){
			    Color	fontcolor=JColorChooser.showDialog(this,"字体颜色选择",a1.getForeground());
			    	  a1.setForeground(fontcolor);
			    }
	}


//这是查找窗口,对不起,查找功能没实现Search.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Search extends JDialog{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JLabel l1=new JLabel("查找内容");
	JTextField t1=new JTextField(10);
	JButton b1=new JButton("查找下一个");
	JButton b2=new JButton("取消");
	Font f1=new Font("隶书",Font.PLAIN,15);
	public Search(){
		setTitle("查找");
		setSize(300,200);
		setLayout(new FlowLayout());
		b1.setFont(f1);
		b2.setFont(f1);
		l1.setFont(f1);
		add(l1);
		add(t1);
		add(b1);
		add(b2);
		b2.addActionListener(new MyActionListener2());
	}
	class MyActionListener2 implements ActionListener{
		public void actionPerformed(ActionEvent e1) {
			setVisible(false);
		}
		
	}
}


运行截图:




原文地址:https://www.cnblogs.com/xiaoduc-org/p/5327259.html