来自:https://blog.csdn.net/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() {@Overridepublic void removeUpdate(DocumentEvent e) {flagFile=1;}@Overridepublic void insertUpdate(DocumentEvent e) {flagFile=1;}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void actionPerformed(ActionEvent e) {new HFile().saveFile(f, textArea);flagFile=0;}});//统计的监听器FontCount.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new HFontCount(textArea);  }});//字体设置的监听器SetFont.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new HSetFont(f,textArea);}});//大小写转换的监听器FontChange.addChangeListener(new ChangeListener() {@Overridepublic 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)){chars[i] = Character.toLowerCase(c);continue;}//如果为小写,变为大写chars[i] = Character.toUpperCase(c);}String str1 = new String(chars);textArea.setText(str1);}}});//设置背景颜色的监听器SetBackColor.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Color color = JColorChooser.showDialog(f, "选取颜色", null);// 如果用户取消或关闭窗口, 则返回的 color 为 nullif (color == null) {return;}textArea.setBackground(color);}});//关于文本编辑器的监听器About.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JFrame f = new JFrame("关于文本编辑器");//弹出无提示图片的消息窗口JOptionPane.showMessageDialog(f,"JAVA课设\nMake By d幻月b","文本编辑器",JOptionPane.PLAIN_MESSAGE);}});//窗口关闭的监听器,提示保存f.addWindowListener(new WindowAdapter() {@Overridepublic void windowOpened(WindowEvent e) {// TODO 自动生成的方法存根}@Overridepublic void windowIconified(WindowEvent e) {// TODO 自动生成的方法存根}@Overridepublic void windowDeiconified(WindowEvent e) {// TODO 自动生成的方法存根}@Overridepublic void windowDeactivated(WindowEvent e) {// TODO 自动生成的方法存根}@Overridepublic void windowClosing(WindowEvent 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;}}}@Overridepublic void windowClosed(WindowEvent e) {}@Overridepublic void windowActivated(WindowEvent e) {// TODO 自动生成的方法存根}});textArea.addKeyListener(new KeyAdapter() {//按下某键public void keyPressed(KeyEvent e) {int row = 0;int col = 0;int pos = textArea.getCaretPosition(); //获得光标位置            try {row = textArea.getLineOfOffset(pos) + 1; //返回行从0算起,要+1col = pos-textArea.getLineStartOffset(row-1)+1; }catch(Exception exception) {}label.setText("第" + row+"行," +"第"+col+"列      " ); }// 释放某键public void keyReleased(KeyEvent e) {int row = 0;int col = 0;int pos = textArea.getCaretPosition(); //获得光标位置            try {row = textArea.getLineOfOffset(pos) + 1; //返回行从0算起,要+1col = pos-textArea.getLineStartOffset(row-1)+1; }catch(Exception exception) {}label.setText("第" + row+"行," +"第"+col+"列      " ); }});//新建文件的快捷键NewFile.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N,java.awt.Event.CTRL_MASK));NewFile.setMnemonic('N');//打开文件的快捷键OpenFile.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O,java.awt.Event.CTRL_MASK));OpenFile.setMnemonic('O');//保存文件的快捷键SaveFile.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S,java.awt.Event.CTRL_MASK));SaveFile.setMnemonic('S');//统计字数的快捷键FontCount.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.Event.ALT_MASK));FontCount.setMnemonic('C');//查找的快捷键Search.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F,java.awt.Event.CTRL_MASK));Search.setMnemonic('F');//替换的快捷键Replace.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G,java.awt.Event.CTRL_MASK));Replace.setMnemonic('G');//大小写转换的快捷键FontChange.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R,java.awt.Event.CTRL_MASK));FontChange.setMnemonic('R');//载入4个一级菜单mb.add(mFile);mb.add(mEdit);mb.add(mForm);mb.add(mHelp);f.setJMenuBar(mb);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}public static void main(String[] args) {new TestGui();}
}

HFile类

package T_1029;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;public class HFile {public void openFile(JFrame f,JTextArea textArea) {// 创建一个默认的文件选取器JFileChooser fileChooser = new JFileChooser();// 设置默认显示的文件夹为当前文件夹fileChooser.setCurrentDirectory(new File("."));// 设置文件选择的模式(只选文件、只选文件夹、文件和文件均可选)fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);// 设置是否允许多选fileChooser.setMultiSelectionEnabled(false);// 设置默认使用的文件过滤器fileChooser.setFileFilter(new FileNameExtensionFilter("txt(*.txt)", "txt"));// 打开文件选择框int result = fileChooser.showOpenDialog(f);if(result==1)return ;if (result == JFileChooser.APPROVE_OPTION) {try {  textArea.setText("");File file = fileChooser.getSelectedFile();FileInputStream fis=new FileInputStream(file);try{//读取数据,并将读取到的数据存储到数组中byte[] data = new byte[1024]; //数据存储的数组int i = fis.read(data);//解析数据String s = new String(data,0,i);textArea.append(s);}catch(Exception e){e.printStackTrace();}finally{try{fis.close();}catch(Exception e){}}f.setTitle(file.getName()+" - 文本编辑器");} catch (IOException e) {e.printStackTrace();}}}public void saveFile(JFrame f,JTextArea textArea) {// 创建一个默认的文件选取器JFileChooser fileChooser = new JFileChooser();// 设置默认显示的文件夹为当前文件夹fileChooser.setCurrentDirectory(new File("."));// 设置打开文件选择框后默认输入的文件名fileChooser.setSelectedFile(new File("新建记事本.txt"));// 打开文件选择框int select = fileChooser.showSaveDialog(f);if (select == JFileChooser.APPROVE_OPTION) {// 保存文本内容File file = fileChooser.getSelectedFile();try {//覆盖文件式写入OutputStream outToFileEnd = new FileOutputStream(file);String string = textArea.getText();byte[] bs = string.getBytes();outToFileEnd.write(bs);outToFileEnd.close();f.setTitle(file.getName()+" - 文本编辑器");} catch (Exception e1) {e1.printStackTrace();}}}
}

HFontCount类

package T_1029;
import java.awt.Font;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class HFontCount {public HFontCount(JTextArea textArea){String line=textArea.getText();JFrame f = new JFrame("统计");//弹出无提示图片的消息窗口JOptionPane.showMessageDialog(f,"字数:"+countChinese(line)+"\n字符数:"+line.length()+"\n行数:"+textArea.getLineCount(),"统计",JOptionPane.PLAIN_MESSAGE);}public static int countChinese(String str) {int count = 0;//正则表达式匹配汉字|全角符号|数字|。|英文字母Pattern p = Pattern.compile("[\\u4e00-\\u9fa5]|[\\uFE30-\\uFFA0]|[0-9]|[\\u3001-\\u3002]|[a-zA-Z]");Matcher m = p.matcher(str);while(m.find()){count++;}return count;}
}

HReplaceText类

package T_1029;import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;public class HReplaceText {public HReplaceText(JFrame f,JTextArea textArea) {JDialog jdlg = new JDialog(f, "替换", true);jdlg.setSize(453, 200);jdlg.setLocationRelativeTo(null);jdlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);JPanel panel=new JPanel();panel.setLayout(null);JLabel label=new JLabel("查找内容:");JLabel label2=new JLabel("替换为:");JLabel count=new JLabel("找到0个");JTextArea ftext=new JTextArea();JTextArea rtext=new JTextArea();JButton findnext=new JButton("查找下一个");JButton replace=new JButton("替换");JButton allreplace=new JButton("全部替换");JButton no=new JButton("取消");JCheckBox matchcase=new JCheckBox("区分大小写");//创建两个单选按钮JRadioButton up = new JRadioButton("向上替换");JRadioButton down = new JRadioButton("向下替换");//创建按钮组,把两个单选按钮添加到该组ButtonGroup btnGroup = new ButtonGroup();btnGroup.add(up);btnGroup.add(down);// 设置第一个单选按钮选中up.setSelected(true);label.setBounds(20,20,93,22);label2.setBounds(20,45,93,22);count.setBounds(20, 55, 80, 85);ftext.setBounds(100,20,200,22);rtext.setBounds(100,48,200,22);findnext.setBounds(320, 18, 105, 32);replace.setBounds(320, 55, 105, 32);allreplace.setBounds(320, 92, 105, 32);no.setBounds(320, 128, 105, 32);matchcase.setBounds(15, 120, 100, 55);up.setBounds(130, 120, 80, 55);down.setBounds(230, 120, 80, 55);//初始化按键状态findnext.setEnabled(false);replace.setEnabled(false);allreplace.setEnabled(false);//查找文本框的监听器,改变按钮状态ftext.getDocument().addDocumentListener(new DocumentListener() {@Overridepublic void removeUpdate(DocumentEvent e) {if(ftext.getText().equals("")) {findnext.setEnabled(false);replace.setEnabled(false);allreplace.setEnabled(false);}}@Overridepublic void insertUpdate(DocumentEvent e) {findnext.setEnabled(true);replace.setEnabled(true);allreplace.setEnabled(true);}@Overridepublic void changedUpdate(DocumentEvent e) {// TODO 自动生成的方法存根}});//查找下一个的监听器findnext.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int c=0;int a = 0, b = 0;int FindStartPos = textArea.getCaretPosition();String strA,strB;// 选中区分大小写,大小写转换if (matchcase.isSelected()) {strA = textArea.getText();strB = ftext.getText();} else {strA = textArea.getText().toLowerCase();strB = ftext.getText().toLowerCase();}//向上查找,否则向下查找if (up.isSelected()) {a = strA.lastIndexOf(strB, FindStartPos - ftext.getText().length() - 1);} else if (down.isSelected()) {a = strA.indexOf(strB, FindStartPos - ftext.getText().length() + 1);}//查找到边界if (a > -1) {if (up.isSelected()) {textArea.setCaretPosition(a);b = ftext.getText().length();textArea.select(a, a + b);} else if (down.isSelected()) {textArea.setCaretPosition(a);b = ftext.getText().length();textArea.select(a, a + b);}} else {JOptionPane.showMessageDialog(null, "找不到查找的内容", "查找", JOptionPane.INFORMATION_MESSAGE);}//显示关键字的总数量Pattern p=Pattern.compile(ftext.getText());Matcher m=p.matcher(textArea.getText());while(m.find()) {c++;}count.setText("找到"+c+"个");}});//替换的监听器replace.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (rtext.getText().length() == 0 && textArea.getSelectedText() != null) {textArea.replaceSelection("");}if (rtext.getText().length() > 0 && textArea.getSelectedText() != null) {textArea.replaceSelection(rtext.getText());}}});//替换全部的监听器allreplace.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//显示关键字的总数量int c=0;Pattern p=Pattern.compile(ftext.getText());Matcher m=p.matcher(textArea.getText());while(m.find()) {c++;}count.setText("替换"+c+"个");//替换全部关键字String str=textArea.getText();str=str.replace(ftext.getText(), rtext.getText());textArea.setText(str);}});//取消的监听器no.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {jdlg.setVisible(false);}});label.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));label2.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));count.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));ftext.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));rtext.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));findnext.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));replace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));allreplace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));no.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));panel.add(label);panel.add(label2);panel.add(count);panel.add(ftext);panel.add(rtext);panel.add(findnext);panel.add(no);panel.add(replace);panel.add(allreplace);panel.add(matchcase);panel.add(up);panel.add(down);jdlg.setResizable(false);jdlg.setContentPane(panel);jdlg.setVisible(true);}
}

HSearchText类

package T_1029;import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;public class HSearchText {public HSearchText(JFrame f,JTextArea textArea) {JDialog jdlg = new JDialog(f, "查找", true);jdlg.setSize(453, 150);jdlg.setLocationRelativeTo(null);jdlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);JPanel panel=new JPanel();panel.setLayout(null);JLabel label=new JLabel("查找内容:");JLabel count=new JLabel("找到0个");JTextArea ftext=new JTextArea();JButton findnext=new JButton("查找下一个");JButton no=new JButton("取消");JCheckBox matchcase=new JCheckBox("区分大小写");//创建两个单选按钮JRadioButton up = new JRadioButton("向上查找");JRadioButton down = new JRadioButton("向下查找");//创建按钮组,把两个单选按钮添加到该组ButtonGroup btnGroup = new ButtonGroup();btnGroup.add(up);btnGroup.add(down);// 设置第一个单选按钮选中up.setSelected(true);label.setBounds(20,20,93,22);count.setBounds(20, 55, 80, 35);ftext.setBounds(100,20,200,22);findnext.setBounds(320, 18, 105, 32);no.setBounds(320, 53, 105, 32);matchcase.setBounds(15, 90, 100, 25);up.setBounds(130, 90, 80, 25);down.setBounds(230, 90, 80, 25);//初始化查找按键findnext.setEnabled(false);//设置文本框和按钮的状态ftext.getDocument().addDocumentListener(new DocumentListener() {@Overridepublic void removeUpdate(DocumentEvent e) {if(ftext.getText().equals(""))findnext.setEnabled(false);}@Overridepublic void insertUpdate(DocumentEvent e) {findnext.setEnabled(true);}@Overridepublic void changedUpdate(DocumentEvent e) {// TODO 自动生成的方法存根}});//查找下一个的监听器findnext.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int c=0;int a = 0, b = 0;int FindStartPos = textArea.getCaretPosition();String strA,strB;// 选中区分大小写,大小写转换if (matchcase.isSelected()) {strA = textArea.getText();strB = ftext.getText();} else {strA = textArea.getText().toLowerCase();strB = ftext.getText().toLowerCase();}//向上查找,否则向下查找if (up.isSelected()) {a = strA.lastIndexOf(strB, FindStartPos - ftext.getText().length() - 1);} else if (down.isSelected()) {a = strA.indexOf(strB, FindStartPos - ftext.getText().length() + 1);}//查找到边界if (a > -1) {if (up.isSelected()) {textArea.setCaretPosition(a);b = ftext.getText().length();textArea.select(a, a + b);} else if (down.isSelected()) {textArea.setCaretPosition(a);b = ftext.getText().length();textArea.select(a, a + b);}} else {JOptionPane.showMessageDialog(null, "找不到查找的内容", "查找", JOptionPane.INFORMATION_MESSAGE);}//显示关键字的总数量Pattern p=Pattern.compile(ftext.getText());Matcher m=p.matcher(textArea.getText());while(m.find()) {c++;}count.setText("找到"+c+"个");}});//取消的监听器no.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {jdlg.setVisible(false);}});label.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));count.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));ftext.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));findnext.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));no.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));panel.add(label);panel.add(count);panel.add(ftext);panel.add(findnext);panel.add(no);panel.add(matchcase);panel.add(up);panel.add(down);jdlg.setResizable(false);jdlg.setContentPane(panel);jdlg.setVisible(true);}
}

HSetFont类

package T_1029;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class HSetFont extends JDialog{public HSetFont(JFrame f,JTextArea textArea) {//获取系统字体库GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();String[] fontNames = e.getAvailableFontFamilyNames();String[] fontStyle=new String[]{"常规","粗体","斜体","粗斜体"};Integer[] fontsize=new Integer[] {8,9,10,11,12,13,14,16,18,20,22,24,26,28,30,32,36,48,72};JDialog jdlg = new JDialog(f, "字体设置", true);jdlg.setSize(453, 325);jdlg.setLocationRelativeTo(null);jdlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);JPanel panel=new JPanel();panel.setLayout(null);JButton yes=new JButton("确定");JButton no=new JButton("取消");JButton setfontcolor=new JButton("字体颜色");JLabel fonts=new JLabel("字体:");JLabel style=new JLabel("样式:");JLabel size=new JLabel("大小:");JLabel cg=new JLabel("AaBbCc");// 创建下拉列表框final JComboBox<String> comboBox = new JComboBox<String>(fontNames);final JComboBox<String> comboBox2=new JComboBox<String>(fontStyle);final JComboBox<Integer> comboBox3=new JComboBox<Integer>(fontsize);// 添加条目选中状态改变的监听器comboBox.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {// 只处理选中的状态if (e.getStateChange() == ItemEvent.SELECTED) {cg.setFont(new Font((String) comboBox.getSelectedItem(), cg.getFont().getStyle(), cg.getFont().getSize()));}}});comboBox2.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED) {if(comboBox2.getSelectedItem().equals("常规")) {cg.setFont(new Font(cg.getFont().getName(), Font.PLAIN, cg.getFont().getSize()));}else if(comboBox2.getSelectedItem().equals("粗体")){cg.setFont(new Font(cg.getFont().getName(), Font.BOLD, cg.getFont().getSize()));}else if(comboBox2.getSelectedItem().equals("斜体")){cg.setFont(new Font(cg.getFont().getName(), Font.ITALIC, cg.getFont().getSize()));}else if(comboBox2.getSelectedItem().equals("粗斜体")) {cg.setFont(new Font(cg.getFont().getName(), Font.BOLD+ Font.ITALIC, cg.getFont().getSize()));}}}});comboBox3.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED) {cg.setFont(new Font(cg.getFont().getName(), cg.getFont().getStyle(), (int) comboBox3.getSelectedItem()));}}});setfontcolor.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Color color = JColorChooser.showDialog(f, "选取颜色", null);// 如果用户取消或关闭窗口, 则返回的 color 为 nullif (color == null) {return;}textArea.setForeground(color);}});yes.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {textArea.setFont(cg.getFont());jdlg.setVisible(false);}});no.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {jdlg.setVisible(false);}});//设置元件位置和宽高fonts.setBounds(20,20,45,18);style.setBounds(190,20,45,18);size.setBounds(313,20,45,18);comboBox.setBounds(20,42,170,22);comboBox2.setBounds(190,42,119,22);comboBox3.setBounds(309, 42, 119, 22);cg.setBounds(30,89,378,137);setfontcolor.setBounds(20,249,102,30);yes.setBounds(300,249,62,30);no.setBounds(366,249,62,30);fonts.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));style.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));size.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));cg.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 12));setfontcolor.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 12));yes.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));no.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));comboBox.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));comboBox2.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));comboBox3.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));// 设置字体下拉框为文本框的字体样式comboBox.setSelectedItem(textArea.getFont().getFontName());comboBox3.setSelectedItem(textArea.getFont().getSize());comboBox2.setSelectedIndex(textArea.getFont().getStyle());// 添加到内容面板panel.add(fonts);panel.add(style);panel.add(size);panel.add(comboBox);panel.add(comboBox2);panel.add(comboBox3);panel.add(setfontcolor);panel.add(yes);panel.add(no);panel.add(cg);jdlg.setResizable(false);jdlg.setContentPane(panel);jdlg.setVisible(true);    }
}

四、效果展示





Java课设——文本编辑器相关推荐

  1. Java课设——ArxivHelper

    项目地址https://github.com/PKUCSS/arxiv-helper How to run运行方式:java -jar arxiv-helper.jar Tips:We use pyi ...

  2. JAVA课设:电子英汉词典(附源码+调试)

    JAVA课设:电子英汉词典 电子英汉词典功能概述 整体要求:用图形用户界面实现,能够编辑词典库中的信息,能够实现英译汉,汉译英.(要考虑一词多义) 具体实现:1.用图形用户界面实现:2.能够实现英译汉 ...

  3. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  4. java 课设 商品库存管理系统

    比较辛苦的java课设!写了蛮久的,战斗了好多个通宵. 下载https://download.csdn.net/download/qq_37871063/10297290 入门:JAVAFX+MVC+ ...

  5. 华南农业大学课设——数据结构课设、Java课设、操作系统课设

    文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...

  6. 学生信息管理系统(成绩统计)Java课设

    下载地址:学生信息管理系统(成绩统计)Java课设-Web服务器文档类资源-CSDN下载 ├── StudentInfo │   ├── bin │   │   ├── com │   │   │   ...

  7. JAVA课设单人版五子棋小游戏

    内容介绍:该程序为Java课设的单人版五子棋小游戏,通过eclipse编辑,实现了动作事件的监听与处理,以及JavaSwing的界面编程.  编辑排行榜,包含局数,结果,步数,以及"关于我们 ...

  8. java html文本编辑器,基于Java WebHTML在线文本编辑器解决方案.doc

    基于Java WebHTML在线文本编辑器解决方案 基于Java WebHTML在线文本编辑器解决方案 摘要:FckEditor作为众多优秀HTML在线文本编辑器之一,以其支持多语言的优势而受到众多国 ...

  9. 100套java课设源码参考/毕设源码代码参考

    引言:本人是一个Java 开发者,喜欢分享Java课设源码和代码,用于课程设计或者作业学习参考噢,开发一些有技术含量的Java web源码,主要的技术有JSP+Servlet,SSM/SpringBo ...

  10. java集成富文本编辑器UEditor

    JAVA集成富文本编辑器UEditor 集成前说明 集成UEditor 一.UEditor下载 二.UEditor迁入项目 三.引入ueditor中的js 四.初始化UEditor 五.实现图片上传 ...

最新文章

  1. oracle 11查询sid,oracle 11g 更改sid和dbname
  2. “数据中心运维管理VIP学习群”问题汇总(一)
  3. 使用Caffe预测遇到的问题
  4. 虚拟机安装jdk步骤及命令
  5. HDU2012 素数判定
  6. 暑期集训 Day2 简单博弈论
  7. DBC2000数据库,DBC2000怎么设置?DBC2000架设传奇教程
  8. 已加密的PDF怎么解密?只要学会这两招即可轻松解密
  9. wordpress建站我们如何选择虚拟主机和VPS服务器呢?
  10. Nginx 使用 ngx_http_mirror_module 模块 复制 http请求流量
  11. 盘是什么意思计算机网络,hdd网络上什么意思
  12. 腾讯云手游安全MTP怎么样?腾讯云手游安全MTP值得入手吗?
  13. 在宜家兼职收银员创收
  14. Python爬虫:Scrapy 框架快速入门及实战演练
  15. java培训记录Day06 2022/3/19星期六(网页布局:grid)
  16. HK01BS单通道电容式触控芯片IC内置稳压LDO低压复位模块
  17. 阿里菜鸟架构师:如何设计能抗住“双11”的交易系统架构?
  18. Windows11怎么配置Java环境变量
  19. 微信视频通话视频录制_录制视频通话和数据保护
  20. 计算机控制xbox,只需这五步操作 就能在电脑上玩Xbox了

热门文章

  1. Python 3.7 pygame 下载方法
  2. iso 9000下载_ISO 9000 | 软件工程
  3. 微软云加速器助edoc2入云腾飞
  4. 软件用户手册(软件使用说明书)模板
  5. 远卓:数字化转型的精益化思考
  6. Excel表格数据生成ECharts图表
  7. java面试项目介绍,详细说明
  8. Java开发求职总结
  9. 草蟒python汉化版_草蟒首页、文档和下载 - Python 汉化版 - OSCHINA - 中文开源技术交流社区...
  10. 深信服桌面云盒子需要服务器吗,为何众多客户选择深信服桌面云?主要看实力...