用JAVA语言编写的文本编辑器

在网上查了一下,好多同学都在找用JAVA语言编写的简单文本编辑器的源代码。这可能是我们在学习JAVA中老师要求做的惯例吧。所以我在这发个我自己个人今天写出来的给大家参考参考。每个人都有自己的想法,当然我不敢说我的是最好的,但是参考价值还是有的:

Code:
  1. import java.awt.BorderLayout;   
  2. import java.awt.Button;   
  3. import java.awt.Dialog;   
  4. import java.awt.FileDialog;   
  5. import java.awt.FlowLayout;   
  6. import java.awt.Font;   
  7. import java.awt.Frame;   
  8. import java.awt.GridLayout;   
  9. import java.awt.Label;   
  10. import java.awt.List;   
  11. import java.awt.Menu;   
  12. import java.awt.MenuBar;   
  13. import java.awt.MenuItem;   
  14. import java.awt.MenuShortcut;   
  15. import java.awt.Panel;   
  16. import java.awt.TextArea;   
  17. import java.awt.Toolkit;   
  18. import java.awt.datatransfer.Clipboard;   
  19. import java.awt.datatransfer.DataFlavor;   
  20. import java.awt.datatransfer.StringSelection;   
  21. import java.awt.datatransfer.Transferable;   
  22. import java.awt.event.ActionEvent;   
  23. import java.awt.event.ActionListener;   
  24. import java.awt.event.KeyEvent;   
  25. import java.awt.event.TextEvent;   
  26. import java.awt.event.TextListener;   
  27. import java.awt.event.WindowAdapter;   
  28. import java.awt.event.WindowEvent;   
  29. import java.io.BufferedReader;   
  30. import java.io.BufferedWriter;   
  31. import java.io.FileReader;   
  32. import java.io.FileWriter;   
  33.   
  34. import javax.swing.undo.UndoManager;   
  35.   
  36.   
  37.   
  38.   
  39.   
  40.   
  41. public class Txt extends Frame  implements ActionListener,TextListener   
  42. {   
  43.            
  44.     private static final long serialVersionUID = 1L;   
  45.       
  46.     //*****************初始化工作**************   
  47.        
  48.     MenuBar menuBar;   
  49.     Menu menuFile,menuEdi,menuFormat,menuHelp;   
  50.     MenuItem menuItemNew,menuItemOpen,menuItemSave,menuItemOsave,menuItemExit,   
  51.              menuItemCut,menuItemCopy,menuItemPase,menuItemDel,menuItemSelectAll,   
  52.              menuItemFont,menuItemAbout;   
  53.     TextArea textArea;   
  54.     FileDialog fileOpen,fileSave;   
  55.     String temp,fileName;   
  56.     MyDialog myDialog;   
  57.     boolean change=false;   
  58.     TextClipboard cb;   
  59.     UndoManager undoManager=new UndoManager();   
  60.   
  61.        
  62.     public Txt()   
  63.     {   
  64.         super("文本编辑器");   
  65.         this.setBounds(200200400300);   
  66.         menuBar=new MenuBar();   
  67.         textArea=new TextArea();   
  68.         textArea.addTextListener(this);   
  69.            
  70.         menuFile=new Menu("文件(F)");   
  71.         menuItemNew=new MenuItem("新建(N)");   
  72.         menuItemNew.setShortcut(new MenuShortcut(KeyEvent.VK_N));   
  73.         menuItemNew.addActionListener(this);   
  74.         menuItemOpen=new MenuItem("打开(O)...");   
  75.         menuItemOpen.setShortcut(new MenuShortcut(KeyEvent.VK_O));   
  76.         menuItemOpen.addActionListener(this);   
  77.         menuItemSave=new MenuItem("保存(S)");   
  78.         menuItemSave.setShortcut(new MenuShortcut(KeyEvent.VK_S));   
  79.         menuItemSave.addActionListener(this);   
  80.         menuItemOsave=new MenuItem("另存为(A)...");   
  81.         menuItemOsave.addActionListener(this);   
  82.         menuItemExit=new MenuItem("退出(X)");   
  83.         menuItemExit.addActionListener(this);   
  84.         menuItemExit.setShortcut(new MenuShortcut(KeyEvent.VK_E));   
  85.         menuFile.add(menuItemNew);   
  86.         menuFile.add(menuItemOpen);   
  87.         menuFile.add(menuItemSave);   
  88.         menuFile.add(menuItemOsave);   
  89.         menuFile.addSeparator();   
  90.         menuFile.add(menuItemExit);   
  91.            
  92.         menuEdi=new Menu("编辑(E)");   
  93.         menuItemCut=new MenuItem("剪切(T)");   
  94.         menuItemCut.setShortcut(new MenuShortcut(KeyEvent.VK_X));   
  95.         menuItemCut.addActionListener(this);   
  96.         menuItemCopy=new MenuItem("复制(C)");   
  97.         menuItemCopy.setShortcut(new MenuShortcut(KeyEvent.VK_C));   
  98.         menuItemCopy.addActionListener(this);   
  99.         menuItemPase=new MenuItem("粘帖(P)");   
  100.         menuItemPase.setShortcut(new MenuShortcut(KeyEvent.VK_V));   
  101.         menuItemPase.addActionListener(this);   
  102.         menuItemDel=new MenuItem("删除(L)");   
  103.         menuItemDel.addActionListener(this);   
  104.         menuItemSelectAll=new MenuItem("全选(A)");   
  105.         menuItemSelectAll.setShortcut(new MenuShortcut(KeyEvent.VK_A));   
  106.         menuItemSelectAll.addActionListener(this);   
  107.            
  108.         menuEdi.add(menuItemCut);   
  109.         menuEdi.add(menuItemCopy);   
  110.         menuEdi.add(menuItemPase);   
  111.         menuEdi.add(menuItemDel);   
  112.         menuEdi.addSeparator();   
  113.         menuEdi.add(menuItemSelectAll);   
  114.            
  115.         menuFormat=new Menu("格式(O)");   
  116.         menuItemFont=new MenuItem("字体...");   
  117.         menuItemFont.addActionListener(this);   
  118.         menuFormat.add(menuItemFont);   
  119.            
  120.         menuHelp=new Menu("帮助(H)");   
  121.         menuItemAbout=new MenuItem("关于记事本");   
  122.         menuItemAbout.addActionListener(this);   
  123.         menuHelp.add(menuItemAbout);   
  124.            
  125.         menuBar.add(menuFile);   
  126.         menuBar.add(menuEdi);   
  127.         menuBar.add(menuFormat);   
  128.         menuBar.add(menuHelp);   
  129.            
  130.         fileName="";   
  131.            
  132.         myDialog=new MyDialog(this"保存文件?"true);   
  133.            
  134.         fileSave=new FileDialog(this,"保存文件",FileDialog.SAVE);   
  135.         fileSave.setBounds(200200400300);   
  136.         fileOpen=new FileDialog(this,"打开文件",FileDialog.LOAD);   
  137.         fileOpen.setBounds(200200400300);   
  138.            
  139.         cb=new TextClipboard();   
  140.         this.addWindowListener(new WindowAdapter()   
  141.         {   
  142.             public void windowClosing(WindowEvent arg0)    
  143.             {   
  144.                 if(fileName!="")   
  145.                 {   
  146.                     if(change==false)   
  147.                         System.exit(0);   
  148.                     if(change==true)   
  149.                     {   
  150.                         save(fileName);   
  151.                         System.exit(0);   
  152.                     }   
  153.                            
  154.                 }   
  155.                        
  156.                 if(fileName=="")   
  157.                 {   
  158.                     if(change==false)   
  159.                         System.exit(0);   
  160.                     if(change==true)   
  161.                     {   
  162.                         myDialog.setVisible(true);   
  163.                         if(myDialog.getMessage()==MyDialog.YES)   
  164.                         {   
  165.                             fileSave.setVisible(true);   
  166.                             fileName=fileSave.getDirectory()+"//"+fileSave.getFile();   
  167.                             save(fileName);   
  168.                             System.exit(0);   
  169.                         }   
  170.                         if(myDialog.getMessage()==MyDialog.NO)   
  171.                             System.exit(0);   
  172.                     }   
  173.                 }                  
  174.                    
  175.             }   
  176.         });   
  177.         this.setMenuBar(menuBar);   
  178.         this.add(textArea);   
  179.         this.setVisible(true);   
  180.     }   
  181.        
  182.     //*****************办法**************   
  183.        
  184.     public void open(String path)   
  185.     {   
  186.        try {   
  187.             FileReader file=new FileReader(path);   
  188.             BufferedReader read=new BufferedReader(file);   
  189.             StringBuffer sb=new StringBuffer();   
  190.             while((temp=read.readLine())!=null)   
  191.                 sb.append(temp+'/n');   
  192.             textArea.setText(sb.toString());   
  193.             file.close();   
  194.             read.close();   
  195.             } catch (Exception e) {   
  196.         }   
  197.     }   
  198.        
  199.     public void save(String path)   
  200.     {   
  201.         try{   
  202.             FileWriter file=new FileWriter(path);   
  203.             BufferedWriter bw=new BufferedWriter(file);   
  204.             bw.write(textArea.getText());   
  205.             bw.close();   
  206.         }   
  207.         catch(Exception e)   
  208.         {   
  209.         }   
  210.     }   
  211.        
  212.     //*****************事件监听器**************   
  213.     public void textValueChanged(TextEvent arg0) {   
  214.         change=true;   
  215.     }   
  216.     public void actionPerformed(ActionEvent e)    
  217.     {   
  218.         if(e.getSource()==menuItemNew)   
  219.         {   
  220.             if(fileName!="")   
  221.             {   
  222.                 save(fileName);   
  223.                 textArea.setText("");   
  224.             }   
  225.                    
  226.             if(fileName==""&&change==true)   
  227.             {   
  228.                 fileSave.setVisible(true);   
  229.                 fileName=fileSave.getDirectory()+"//"+fileSave.getFile();   
  230.                 save(fileName);   
  231.                 textArea.setText("");   
  232.             }   
  233.             else {   
  234.                 textArea.setText("");   
  235.                 fileName="";   
  236.             }      
  237.         }   
  238.         if(e.getSource()==menuItemOpen)   
  239.         {   
  240.             fileOpen.setVisible(true);   
  241.             fileName=fileOpen.getDirectory()+"//"+fileOpen.getFile();   
  242.             open(fileName);   
  243.                
  244.         }   
  245.         if(e.getSource()==menuItemSave)   
  246.         {   
  247.             if(fileName!="")   
  248.                 save(fileName);   
  249.             else  
  250.             {   
  251.                 fileSave.setVisible(true);   
  252.                 fileName=fileSave.getDirectory()+"//"+fileSave.getFile();   
  253.                 save(fileName);   
  254.             }   
  255.         }   
  256.         if(e.getSource()==menuItemOsave)   
  257.         {   
  258.             fileSave.setVisible(true);   
  259.             fileName=fileSave.getDirectory()+"//"+fileSave.getFile();   
  260.             save(fileName);   
  261.         }   
  262.         if(e.getSource()==menuItemExit)   
  263.         {   
  264.             if(fileName!="")   
  265.             {   
  266.                 if(change==false)   
  267.                     System.exit(0);   
  268.                 if(change==true)   
  269.                 {   
  270.                     save(fileName);   
  271.                     System.exit(0);   
  272.                 }   
  273.                        
  274.             }   
  275.                    
  276.             if(fileName=="")   
  277.             {   
  278.                 if(change==false)   
  279.                     System.exit(0);   
  280.                 if(change==true)   
  281.                 {   
  282.                     myDialog.setVisible(true);   
  283.                     if(myDialog.getMessage()==MyDialog.YES)   
  284.                     {   
  285.                         fileSave.setVisible(true);   
  286.                         fileName=fileSave.getDirectory()+"//"+fileSave.getFile();   
  287.                         save(fileName);   
  288.                         System.exit(0);   
  289.                     }   
  290.                     if(myDialog.getMessage()==MyDialog.NO)   
  291.                         System.exit(0);   
  292.                 }   
  293.             }          
  294.         }   
  295.         if(e.getSource()==menuItemCut)   
  296.         {   
  297.             cb.setData(textArea.getSelectedText());   
  298.             textArea.replaceRange("", textArea.getSelectionStart(), textArea.getSelectionEnd());   
  299.         }   
  300.         if(e.getSource()==menuItemCopy)   
  301.         {   
  302.             cb.setData(textArea.getSelectedText());   
  303.         }   
  304.         if(e.getSource()==menuItemPase)   
  305.         {   
  306.             textArea.replaceRange(cb.getData(), textArea.getSelectionStart(), textArea.getSelectionEnd());   
  307.         }   
  308.         if(e.getSource()==menuItemDel)   
  309.         {   
  310.             textArea.replaceRange("", textArea.getSelectionStart(), textArea.getSelectionEnd());   
  311.         }   
  312.         if(e.getSource()==menuItemSelectAll)   
  313.         {   
  314.             textArea.selectAll();   
  315.         }   
  316.         if(e.getSource()==menuItemFont)   
  317.         {   
  318.             SetFont setfont=new SetFont(this,"字体设置",true);   
  319.             setfont.setVisible(true);   
  320.             textArea.setFont(setfont.myFont);   
  321.                
  322.         }   
  323.         if(e.getSource()==menuItemAbout)   
  324.         {   
  325.             DialogAbout diaAbout=new DialogAbout(this,"关于文本编辑器",true);   
  326.             diaAbout.setVisible(true);   
  327.         }   
  328.     }   
  329.        
  330.     public static void main(String[] args)    
  331.     {   
  332.         new Txt();   
  333.     }   
  334. }   
  335.   
  336. //*****************保存提示框类**************   
  337.   
  338. class MyDialog extends Dialog implements ActionListener    
  339. {   
  340.     /**   
  341.      *    
  342.      */   
  343.     private static final long serialVersionUID = 1L;   
  344.     static final int YES = 1, NO = 0;   
  345.     int message = -1;   
  346.     Button yes, no;   
  347.   
  348.     MyDialog(Frame f, String s, boolean b)    
  349.     {   
  350.         super(f, s, b);   
  351.         yes = new Button("保存文件");   
  352.         yes.addActionListener(this);   
  353.         no = new Button("不保存并退出");   
  354.         no.addActionListener(this);   
  355.         setLayout(new FlowLayout());   
  356.         add(yes);   
  357.         add(no);   
  358.         setBounds(30030020080);   
  359.         addWindowListener(new WindowAdapter() {   
  360.             public void windowClosing(WindowEvent e) {   
  361.                 message = -1;   
  362.                 setVisible(false);   
  363.             }   
  364.         });   
  365.     }   
  366.   
  367.     public void actionPerformed(ActionEvent e) {   
  368.         if (e.getSource() == yes) {   
  369.             message = YES;   
  370.             setVisible(false);   
  371.         } else if (e.getSource() == no) {   
  372.             message = NO;   
  373.             setVisible(false);   
  374.         }   
  375.     }   
  376.   
  377.     public int getMessage() {   
  378.         return message;   
  379.     }   
  380. }   
  381.   
  382. //*****************关于对话框类**************   
  383.   
  384. class DialogAbout extends Dialog implements ActionListener   
  385. {   
  386.     private static final long serialVersionUID = 1L;   
  387.     Button button;   
  388.     Label l;   
  389.     DialogAbout(Frame f, String s, boolean b)    
  390.     {   
  391.         super(f,s,b);   
  392.         setLayout(new FlowLayout());   
  393.         button=new Button("了解");   
  394.         l=new Label("菜鸟级人物编写--LECYKX");   
  395.         button.addActionListener(this);   
  396.         add(l);   
  397.         add(button);   
  398.         setBounds(300300200100);   
  399.         addWindowListener(new WindowAdapter() {   
  400.             public void windowClosing(WindowEvent e) {   
  401.                 setVisible(false);   
  402.             }   
  403.         });   
  404.     }   
  405.        
  406.     public void actionPerformed(ActionEvent e) {   
  407.         if(e.getSource()==button)   
  408.         {   
  409.             setVisible(false);   
  410.         }   
  411.     }   
  412. }   
  413. //*****************剪切板类**************   
  414.   
  415. class TextClipboard   
  416. {   
  417.     private Clipboard cb;   
  418.     public TextClipboard(){   
  419.         cb=Toolkit.getDefaultToolkit().getSystemClipboard();   
  420.     }   
  421.     public void setData(String data){   
  422.         cb.setContents(new StringSelection(data),null);   
  423.     }   
  424.     public String getData(){   
  425.         Transferable content=cb.getContents(null);   
  426.         try{   
  427.             return (String) content.getTransferData(DataFlavor.stringFlavor);   
  428.         }catch(Exception e){}   
  429.         return null;   
  430.     }   
  431. }   
  432. //*****************字体设置类**************   
  433.   
  434. class SetFont extends Dialog implements ActionListener   
  435. {   
  436.     private static final long serialVersionUID = 1L;   
  437.        
  438.     Panel p1,p2,p3;   
  439.     Label labelName,labelStyle,labelSize;   
  440.     List listName,listStyle,listSize;   
  441.     Button yes;   
  442.     Font myFont;   
  443.        
  444.     SetFont(Frame f, String s, boolean b)   
  445.     {   
  446.         super(f,s,b);   
  447.         this.setBounds(250250420180);   
  448.         this.setLayout(new BorderLayout());   
  449.            
  450.         p1=new Panel();   
  451.         p1.setLayout(new GridLayout(1,3));   
  452.         labelName=new Label("字体(F):",Label.LEFT);   
  453.         labelStyle=new Label("字形(Y):",Label.LEFT);   
  454.         labelSize=new Label("大小(S):",Label.LEFT);   
  455.         p1.add(labelName);   
  456.         p1.add(labelStyle);   
  457.         p1.add(labelSize);   
  458.            
  459.         listName=new List(4);   
  460.         listName.add("宋体");   
  461.         listName.add("黑体");   
  462.         listName.add("华文行楷");   
  463.         listName.add("华文新魏");   
  464.         listName.add("楷体");   
  465.         listName.add("隶书");   
  466.         listName.select(0);   
  467.            
  468.         listStyle=new List(4);   
  469.         listStyle.add("常规");   
  470.         listStyle.add("粗体");   
  471.         listStyle.add("斜体");   
  472.         listStyle.add("粗体斜体");   
  473.         listName.select(0);   
  474.            
  475.         listSize=new List(4);   
  476.         listSize.add("8");   
  477.         listSize.add("9");   
  478.         listSize.add("10");   
  479.         listSize.add("11");   
  480.         listSize.add("12");   
  481.         listSize.add("14");   
  482.         listSize.add("16");   
  483.         listSize.add("18");   
  484.         listSize.add("20");   
  485.         listSize.select(4);   
  486.            
  487.         p2=new Panel();   
  488.         p2.add(listName);   
  489.         p2.add(listStyle);   
  490.         p2.add(listSize);   
  491.            
  492.         p3=new Panel();   
  493.         yes=new Button("确定");   
  494.         yes.addActionListener(this);   
  495.         p3.add(yes);   
  496.            
  497.         this.add(p1,BorderLayout.NORTH);   
  498.         this.add(p2,BorderLayout.CENTER);   
  499.         this.add(p3,BorderLayout.SOUTH);   
  500.            
  501.         this.addWindowListener(new WindowAdapter() {   
  502.             public void windowClosing(WindowEvent e) {   
  503.                 setVisible(false);   
  504.             }   
  505.         });   
  506.            
  507.     }   
  508.     public Font getFont()   
  509.     {   
  510.         int style=Font.PLAIN;;   
  511.         int size=Integer.parseInt(listSize.getSelectedItem());   
  512.         if(listStyle.getSelectedIndex()==0)   
  513.             style=Font.PLAIN;   
  514.         if(listStyle.getSelectedIndex()==1)   
  515.             style=Font.BOLD;   
  516.         if(listStyle.getSelectedIndex()==2)   
  517.             style=Font.ITALIC;   
  518.         if(listStyle.getSelectedIndex()==3)   
  519.             style=(Font.BOLD|Font.ITALIC);   
  520.         return myFont=new Font(listName.getSelectedItem(),style,size);   
  521.            
  522.     }   
  523.     public void actionPerformed(ActionEvent e)    
  524.     {   
  525.         if(e.getSource()==yes)   
  526.         {   
  527.             this.getFont();   
  528.             this.setVisible(false);   
  529.         }   
  530.     }   
  531.        
  532. }  

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值