Java课设——文本编辑器
来自: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课设——文本编辑器相关推荐
- Java课设——ArxivHelper
项目地址https://github.com/PKUCSS/arxiv-helper How to run运行方式:java -jar arxiv-helper.jar Tips:We use pyi ...
- JAVA课设:电子英汉词典(附源码+调试)
JAVA课设:电子英汉词典 电子英汉词典功能概述 整体要求:用图形用户界面实现,能够编辑词典库中的信息,能够实现英译汉,汉译英.(要考虑一词多义) 具体实现:1.用图形用户界面实现:2.能够实现英译汉 ...
- 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇
马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...
- java 课设 商品库存管理系统
比较辛苦的java课设!写了蛮久的,战斗了好多个通宵. 下载https://download.csdn.net/download/qq_37871063/10297290 入门:JAVAFX+MVC+ ...
- 华南农业大学课设——数据结构课设、Java课设、操作系统课设
文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...
- 学生信息管理系统(成绩统计)Java课设
下载地址:学生信息管理系统(成绩统计)Java课设-Web服务器文档类资源-CSDN下载 ├── StudentInfo │ ├── bin │ │ ├── com │ │ │ ...
- JAVA课设单人版五子棋小游戏
内容介绍:该程序为Java课设的单人版五子棋小游戏,通过eclipse编辑,实现了动作事件的监听与处理,以及JavaSwing的界面编程. 编辑排行榜,包含局数,结果,步数,以及"关于我们 ...
- java html文本编辑器,基于Java WebHTML在线文本编辑器解决方案.doc
基于Java WebHTML在线文本编辑器解决方案 基于Java WebHTML在线文本编辑器解决方案 摘要:FckEditor作为众多优秀HTML在线文本编辑器之一,以其支持多语言的优势而受到众多国 ...
- 100套java课设源码参考/毕设源码代码参考
引言:本人是一个Java 开发者,喜欢分享Java课设源码和代码,用于课程设计或者作业学习参考噢,开发一些有技术含量的Java web源码,主要的技术有JSP+Servlet,SSM/SpringBo ...
- java集成富文本编辑器UEditor
JAVA集成富文本编辑器UEditor 集成前说明 集成UEditor 一.UEditor下载 二.UEditor迁入项目 三.引入ueditor中的js 四.初始化UEditor 五.实现图片上传 ...
最新文章
- oracle 11查询sid,oracle 11g 更改sid和dbname
- “数据中心运维管理VIP学习群”问题汇总(一)
- 使用Caffe预测遇到的问题
- 虚拟机安装jdk步骤及命令
- HDU2012 素数判定
- 暑期集训 Day2 简单博弈论
- DBC2000数据库,DBC2000怎么设置?DBC2000架设传奇教程
- 已加密的PDF怎么解密?只要学会这两招即可轻松解密
- wordpress建站我们如何选择虚拟主机和VPS服务器呢?
- Nginx 使用 ngx_http_mirror_module 模块 复制 http请求流量
- 盘是什么意思计算机网络,hdd网络上什么意思
- 腾讯云手游安全MTP怎么样?腾讯云手游安全MTP值得入手吗?
- 在宜家兼职收银员创收
- Python爬虫:Scrapy 框架快速入门及实战演练
- java培训记录Day06 2022/3/19星期六(网页布局:grid)
- HK01BS单通道电容式触控芯片IC内置稳压LDO低压复位模块
- 阿里菜鸟架构师:如何设计能抗住“双11”的交易系统架构?
- Windows11怎么配置Java环境变量
- 微信视频通话视频录制_录制视频通话和数据保护
- 计算机控制xbox,只需这五步操作 就能在电脑上玩Xbox了
热门文章
- Python 3.7 pygame 下载方法
- iso 9000下载_ISO 9000 | 软件工程
- 微软云加速器助edoc2入云腾飞
- 软件用户手册(软件使用说明书)模板
- 远卓:数字化转型的精益化思考
- Excel表格数据生成ECharts图表
- java面试项目介绍,详细说明
- Java开发求职总结
- 草蟒python汉化版_草蟒首页、文档和下载 - Python 汉化版 - OSCHINA - 中文开源技术交流社区...
- 深信服桌面云盒子需要服务器吗,为何众多客户选择深信服桌面云?主要看实力...