来自: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)