Java课设——文本编辑器

来自:https://blog.youkuaiyun.com/qq_39169598/article/details/84726959

原创不易,转载请加上作者

一、需求

编程实现一个文本编辑器,使其具有新建、打开、保存,编辑(查找、替换、大小写转换等)、统计(字数、行数、字符数等)、格式(字体设置、字体大小、字体颜色、背景颜色等)等功能。
要求:基于JFrame窗体设计、使用菜单进行功能选择。

二、工程目录

工程目录图

三、项目代码

TestGui类

package T_1029;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class TestGui extends JFrame {
   
   
	
	private static final long serialVersionUID = 1L;
	private int flagFile=0;
	public TestGui() {
   
   
		JFrame f = new JFrame("文本编辑器");
        f.setSize(800, 600);
        f.setLocation(200, 200);
 
        JMenuBar mb = new JMenuBar();
        //菜单栏
        JMenu mFile = new JMenu("文件 (F)");
        mFile.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        JMenu mEdit = new JMenu("编辑 (E)");
        mEdit.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        JMenu mForm = new JMenu("格式 (O)");
        mForm.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        JMenu mHelp = new JMenu("帮助 (H)");
        mHelp.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        
        // 菜单项
        JMenuItem NewFile =new JMenuItem("新建(N)");
        NewFile.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mFile.add(NewFile);
        
        JMenuItem OpenFile=new JMenuItem("打开(O)");
        OpenFile.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mFile.add(OpenFile);
        
        JMenuItem SaveFile=new JMenuItem("保存(S)");
        SaveFile.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mFile.add(SaveFile);
        
        JMenuItem Search=new JMenuItem("查找(F)");
        Search.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mEdit.add(Search);
        
        JMenuItem Replace=new JMenuItem("替换(G)");
        Replace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mEdit.add(Replace);
        
        JCheckBoxMenuItem FontChange=new JCheckBoxMenuItem("大小写转换(R)");
        FontChange.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mEdit.add(FontChange);
        
        JMenuItem FontCount=new JMenuItem("统计(C)");
        FontCount.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mEdit.add(FontCount);
        
        JMenuItem SetFont=new JMenuItem("字体设置");
        SetFont.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mForm.add(SetFont);
        
        JMenuItem SetBackColor=new JMenuItem("设置背景颜色");
        SetBackColor.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mForm.add(SetBackColor);
        
        JMenuItem About=new JMenuItem("关于文本编辑器");
        About.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        mHelp.add(About);
        
        JTextArea textArea = new JTextArea();
        //文本框自动换行
        textArea.setLineWrap(true);
      	//设置文本框字体
      	textArea.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 26));
        JPanel panel = new JPanel(new BorderLayout());//使用边界布局
        JLabel label=new JLabel(" ");
		label.setHorizontalAlignment(label.RIGHT);//右对齐
		panel.add(label,BorderLayout.SOUTH);//向窗口添加状态栏标签
		//实例化滚动面板
        JScrollPane scrollPane = new JScrollPane();
        //显示垂直滚动条
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        //文本框填入滚动面板
		scrollPane.setViewportView(textArea);
		//动态面板添加入窗口
		f.getContentPane().add(scrollPane);
		panel.add(scrollPane,BorderLayout.CENTER);
		f.setContentPane(panel);
		f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		//设置文本框内容改变的监听器
		textArea.getDocument().addDocumentListener(new DocumentListener() {
   
   
			@Override
			public void removeUpdate(DocumentEvent e) {
   
   
				flagFile=1;
			}
			@Override
			public void insertUpdate(DocumentEvent e) {
   
   
				flagFile=1;
			}
			@Override
			public void changedUpdate(DocumentEvent e) {
   
   
				// TODO 自动生成的方法存根
			}
		});
		
		//查找的监听器
		Search.addActionListener(new ActionListener() {
   
   
			public void actionPerformed(ActionEvent e) {
   
   
				new HSearchText(f,textArea);
			}
		});
		
		//替换的监听器
		Replace.addActionListener(new ActionListener() {
   
   
			public void actionPerformed(ActionEvent e) {
   
   
				new HReplaceText(f,textArea);
			}
		});
		
		
		//新建文件的监听器
		NewFile.addActionListener(new ActionListener() {
   
   
			@Override
			public void actionPerformed(ActionEvent e) {
   
   
				HFile hFile=new HFile();
				if(flagFile==1){
   
   
		            int result=JOptionPane.showConfirmDialog(f, 
		            		"是否保存更改?", 
		            		"记事本", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
		            if(result==JOptionPane.OK_OPTION){
   
   
		            	hFile.saveFile(f, textArea);//另存为 
		            	
		            }else if(result==JOptionPane.NO_OPTION){
   
   
		                textArea.setText("");
		            }
		            flagFile=0;
				}
				else {
   
   
					textArea.setText("");
					f.setTitle("新建记事本");
				}
			}
		});
		
		//打开文件的监听器
		OpenFile.addActionListener(new ActionListener() {
   
   
			@Override
			public void actionPerformed(ActionEvent e) {
   
   
				HFile hFile=new HFile();
				if(flagFile==1) {
   
   
					int result=JOptionPane.showConfirmDialog(f, 
		            		"是否保存更改?", 
		            		"记事本-保存", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
		            if(result==JOptionPane.OK_OPTION){
   
   
		            	hFile.saveFile(f, textArea);
		            	flagFile=0;
		            }
		            else if(result==JOptionPane.NO_OPTION)	
		            	flagFile=0;
				}
				else if(flagFile==0) {
   
   
					hFile.openFile(f, textArea);
				}
					
			}
		});
		//保存文件的监听器
		SaveFile.addActionListener(new ActionListener() {
   
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
   
            	new HFile().saveFile(f, textArea);
            	flagFile=0;
            }
        });
		//统计的监听器
		FontCount.addActionListener(new ActionListener() {
   
   
			@Override
			public void actionPerformed(ActionEvent e) {
   
   
				new HFontCount(textArea);	
			}
		});
		
		//字体设置的监听器
		SetFont.addActionListener(new ActionListener() {
   
   
			@Override
			public void actionPerformed(ActionEvent e) {
   
   
				new HSetFont(f,textArea);
			}
		});
		//大小写转换的监听器
		FontChange.addChangeListener(new ChangeListener() {
   
   
            @Override
            public void stateChanged(ChangeEvent e) {
   
   
            	if(FontChange.isSelected()) {
   
   
            		String string=textArea.getText();
            		char[] chars = string.toCharArray();
                    for (int i = 0, length = chars.length; i < length; i++) {
   
   
                        char c = chars[i];
                        //判断字母是不是大写,如果是大写变为小写
                        if (Character.isUpperCase(c)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值