日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java课设——文本编辑器

發布時間:2023/12/14 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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课设——文本编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。