java记事本(附源代码)

来源:互联网 发布:阿里云邮箱个人版登陆 编辑:程序博客网 时间:2024/06/11 09:56

        

      java记事本

本软件描述:

本软件是模拟Windows  XP的记事本功能,还扩展了一些功能,如改变字体的颜色,加上了,背景颜色,和插入图片的功能等,此软件作品还有很多的不足之处,还各位高手指点迷津,互相学习.本人联系方式(QQ):631818332

功能描述:

1、在文件菜单里面实现了新建文本编辑器,打开文件,保存文件,另存为文件,退出文本编辑器.功能

       2、在编辑菜单里面实现了撤销,恢复,剪切,复制,粘贴,删除,查找,查找下一个,替换,

        全选,时间/日期.功能

3、在格式菜单上实现了插入图片,改变字体,改变字体颜色,背景颜色,视图风格,增加下划线功能

       4、在查看菜单上实现了状态栏,字数统计功能

5、在帮助菜单中现了帮助主题,关干的功能.

一、          设计描述

类描述:

 /*********************主类******************/

public class TextEditor{ 

/**main()方法*/

 public static void main(String args[]) {

 new Note();  //实例化一个Note

 }

}

Note

是一个功能类

 public Note(){}  //构造方法

     /**addToolBar()方法用来设置工具条***/

private void addToolBar(int num,String label,String icon,ActionListener listen){}

/** 内部类fileAction,用来处理文件菜单事件 **/

public class fileAction implements ActionListener {}

/** 内部类editAction,用来处理编辑菜单事件 **/

public class editAction implements ActionListener {}

/** 内部类formatAction,用来处理格式菜单事件 **/

    public class formatAction implements ActionListener {}

/** 内部类viewAction,用来处理查看菜单事件 **/

public class viewAction implements ActionListener {}

/** 内部类helpAction,用来处理帮助菜单事件 **/

  public class helpAction implements ActionListener { } 

/** 内部类mouseAction,用来处理鼠标事件 **/

public class mouseAction extends MouseAdapter {}

/**内部类documentlis用来处理文档内容变化事件***/

public class documentlis implements DocumentListener{    }

    public void insertIcon(File file) { }        //插入图片的方法片     

    public void insertDoc(StyledDocument styledDoc, String content,String currentStyle){}//插入风格字体

   public void createStyle(String style,StyledDocument doc,int size,boolean bold,boolean italic,Color color,String fontName){}//创建风格  

    public void  openFile(){}             //打开文件

    public void saveAsFile() { }        //另存为           

    public void saveFile(){ }           //保存       

    public void exitText(){  } //退出文本的相关操作

   其他类:

    /*********用干文件过滤的外部类***********/

class JavaFileFilter extends FileFilter { }

class TxtFileFilter extends FileFilter {}  

     /**FindDialog用来进行查找***/   

   public class FindDialog extends JDialog implements ActionListener{  }        

    /*******setupFont用来设置字体*********/

public class FontDialog extends JDialog implements ActionListener { }  

/**HelpTheme用来设置帮助主题**/

   public class HelpTheme extends JFrame implements ActionListener{ }  

遇到的难题与解决方案:

1.、怎么样读取文件内容和保存文件内容,运用java 文件操作。运用JFileChooser,

先取得文件路径.然后就运用FileReader来进行读取文件的内容,运用FileWriter来保存文档里面的内容..

2、  如何改变所选择字体的颜色和大小?运用StyleDocument,来先建立风格,然后再插入风格字体,每次改变的时候先移除风格,再进行相应的操作.

3、  如何实现模糊查找与替换?利用正则表达式,用到Pattern Matcher来解决问题

4、  怎么样能够快速的初始化窗口?解决方法就是通过把重复的代码写进一个方法里面来实现,做到了代码重用。

5、  怎么样知道文本的内容是否改变?通过实现设置一个标记变量。然后用实现DocumentListener这一个接口,在里面的方法中把变量设置为true。这个样子就可以通过这一个标记变量来看文本的内容是否改变了。

6、  怎么样能够快速的得到多种颜色?利用到JColorChooser来取得。

二、  总结  

做完这个作品做我学到了很多的知识,比如说的就是java的异常处理文件读取,保存、用到正则表达式来进行模糊查找要找的字符串、利用java中的swing包来手工制作图形用户界面与java中的事件处理、内部类和外部类的使用方法、代码重用的方法、菜单的使用方法和给菜单添加上快捷方式等。当做软件开发的时候就要不断的学习,从而获得更大的进步,在开发的过程中发现自己的不足,汲取别人的长处.多向别人请教.不要不懂装懂.

 

三、作者

                        桂林电子科技大学

                            06级 软件工程

                               陈剑龙

 

 

  1. package javadesign;
  2. import java.awt.*;
  3. import java.util.regex.*;
  4. import javax.swing.*;
  5. import javax.swing.event.DocumentEvent;
  6. import javax.swing.event.DocumentListener;
  7. import javax.swing.filechooser.FileFilter;
  8. import java.awt.event.*;
  9. import java.util.*;
  10. import java.io.*;
  11. import javax.swing.text.*;
  12. import javax.swing.undo.UndoManager;
  13. /*********************主类******************/
  14. public class TextEditor{
  15.     /**main()方法*/
  16.     public static void main(String args[]) {
  17.         new Note();
  18.     }
  19. }
  20. /*************************Note类******************/
  21. class Note {
  22.     private File currentFile=null;
  23.     private JFrame  frame=new JFrame("无标题 - 文字编辑");
  24.     private JMenuBar menuBar = new JMenuBar();  //菜单栏
  25.     private JMenu fileMenu = new JMenu("文件(F)");
  26.     private JMenu editMenu = new JMenu("编辑(E)");
  27.     private JMenu formatMenu = new JMenu("格式(O)");
  28.     private JMenu helpMenu = new JMenu("帮助(H)");
  29.     private JMenu viewMenu = new JMenu("查看(V)");
  30.     private JToolBar toolbar = new JToolBar(); //工具条
  31.     private JMenuItem undoItem,redoItem,findItem, findnextItem;
  32.     private JButton newButton,openButton,saveButton,deleteButton;
  33.     private JButton undoButton,redoButton,copyButton,cutButton,pasteButton;
  34.     private JRadioButtonMenuItem windows,metal,motif;
  35.     private ButtonGroup group=new ButtonGroup();
  36.     private StyledDocument styledDoc=new DefaultStyledDocument();
  37.     public  static JTextPane display;     //JTextPane对象
  38.     private JScrollPane scroll;
  39.     private JPopupMenu  popupmenu = new JPopupMenu();  //右键菜单
  40.     private Color color;
  41.     public static String font_name = "宋体";
  42.     public static int font_size = 20, font_type = Font.PLAIN;
  43.     public static int xp= 400, yp = 100;
  44.     private Container container=frame.getContentPane(); //获得内容面板
  45.     private  Document  doc ;
  46.     /** 添加撤消管理器 */
  47.     private  UndoManager undomang=new   UndoManager();
  48.     private  UIManager.LookAndFeelInfo looks[]= UIManager.getInstalledLookAndFeels(); //风格
  49.     private JLabel statusbar=new JLabel();
  50.     public static boolean selectflag=true;
  51.     private boolean bold,italic,change,newflag,exitflag,windowflag;
  52.     private boolean openflag;/////////////////////////////////////
  53.     public Note() {
  54.         frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);   //窗口关闭时不自动处理
  55.         frame.setSize(500650);    //设置窗口的大小
  56.         frame.setIconImage(Toolkit.getDefaultToolkit().getImage("title.gif")); //给窗口加上图标
  57.         frame.setLocation(400100);       //设置窗口显示的位置
  58.         statusbar.setHorizontalAlignment(JLabel.RIGHT); //设置状态栏在右边显示信息
  59.         windows=new JRadioButtonMenuItem("系统风格",false); //风格按键初始化
  60.         motif=new JRadioButtonMenuItem("MOTIF风格",false);
  61.         metal=new JRadioButtonMenuItem("默认风格",true);
  62.         group.add(windows);  //这样能实现单选
  63.         group.add(motif);
  64.         group.add(metal);
  65.         display= new JTextPane(styledDoc);
  66.         styledDoc.addDocumentListener(new documentLis());//
  67.         doc=display.getDocument();
  68.         toolbar.setEnabled(false); //设置工具条为不要编辑
  69.         doc.addUndoableEditListener(undomang);    //添加事件监听
  70.         frame.addWindowListener(new WindowAdapter() {
  71.             public void windowClosing(WindowEvent e) {
  72.                 if(change) {
  73.                     windowflag=true;
  74.                     exitText();                                     
  75.                 } else  System.exit(0);                
  76.             }
  77.         });
  78.         fileMenu.setMnemonic(KeyEvent.VK_F);//添加相应的快捷方式
  79.         editMenu.setMnemonic(KeyEvent.VK_E);
  80.         formatMenu.setMnemonic(KeyEvent.VK_O);
  81.         helpMenu.setMnemonic(KeyEvent.VK_H);
  82.         viewMenu.setMnemonic(KeyEvent.VK_V);
  83.         container.setLayout(new BorderLayout()); //设置布局
  84.         container.add(display, "Center");
  85.         container.add(toolbar,"North");
  86.         container.add(statusbar,"South");
  87.         display.setFont(new Font("宋体", Font.PLAIN, 20));  //设置字体
  88.         scroll = new JScrollPane(display);      //给文档加上滚动条
  89.         container.add(scroll);
  90.         frame.setJMenuBar(menuBar);             //添加菜单栏
  91.         /** 生成监听器实例对象*/
  92.         ActionListener file = new fileAction();
  93.         ActionListener edit = new editAction();
  94.         ActionListener format = new formatAction();
  95.         ActionListener help = new helpAction();
  96.         MouseListener mouse = new mouseAction();
  97.         ActionListener view = new viewAction();
  98.         /**设置文件菜单*/
  99.         addMenuItem(KeyEvent.VK_N,0"文件""新建(N)"'N', file,fileMenu,true,"new.gif");
  100.         addMenuItem(KeyEvent.VK_O,1"文件""打开(O)..."'O', file,fileMenu,false,"open.gif");
  101.         addMenuItem(KeyEvent.VK_S,2"文件""保存(S)"'S', file ,fileMenu,false,"save.gif");
  102.         addMenuItem(KeyEvent.VK_A,3"文件""另存为(A)..."'0', file,fileMenu,false,null);
  103.         addMenuItem(KeyEvent.VK_X,4"文件""退出(X)"'0', file,fileMenu,false,null);
  104.         /**设置编辑菜单*/
  105.         addMenuItem(KeyEvent.VK_U,0"编辑""撤销(U)"'Z', edit,editMenu,true,"undo.gif");
  106.         addMenuItem(KeyEvent.VK_R,1"编辑""恢复(R)"'Y', edit,editMenu,false,"redo.gif");
  107.         addMenuItem(KeyEvent.VK_T,2"编辑""剪切(T)"'X', edit,editMenu,false,"cut.gif");
  108.         addMenuItem(KeyEvent.VK_C,3"编辑""复制(C)"'C', edit,editMenu,false,"copy.gif");
  109.         addMenuItem(KeyEvent.VK_P,4"编辑""粘贴(P)"'V', edit,editMenu,false,"paste.gif");
  110.         addMenuItem(KeyEvent.VK_L,5"编辑""删除(L)"'0', edit,editMenu,false,"delete.gif");
  111.         addMenuItem(KeyEvent.VK_F,6"编辑""查找(F)"'F', edit,editMenu,false,"find.gif");
  112.         addMenuItem(KeyEvent.VK_N,7"编辑""查找下一个(N)"'0', edit,editMenu,false,null);
  113.         addMenuItem(KeyEvent.VK_E,8"编辑""替换(E)"'Q', edit,editMenu,false,"change.gif");
  114.         addMenuItem(KeyEvent.VK_A,9,"编辑""全选(A)"'A', edit,editMenu,false,null);
  115.         addMenuItem(KeyEvent.VK_D,10,"编辑""时间/日期(D)"'0', edit,editMenu,false,null);
  116.         /**设置格式菜单*/
  117.         addMenuItem(KeyEvent.VK_W,0"格式""插入图片(W)"'0', format,formatMenu,true,null);
  118.         addMenuItem(KeyEvent.VK_F,1"格式""字体(F)"'0', format,formatMenu,false,null);
  119.         addMenuItem(KeyEvent.VK_C,2"格式""颜色(C)"'0', format,formatMenu,false,null);
  120.         addMenuItem(KeyEvent.VK_S,3,"格式","视图风格(S)",'0',format,formatMenu,false,null);
  121.         addMenuItem(KeyEvent.VK_U,4,"格式","下划线(U)",'0',format,formatMenu,false,null);
  122.         /**设置查看菜单*/           
  123.         addMenuItem(KeyEvent.VK_W,1"查看""字数统计(W)"'0', view,viewMenu,true,null);
  124.         /**设置帮助菜单*/
  125.         addMenuItem(KeyEvent.VK_H,0"帮助""帮助主题(H)"'0', help,helpMenu,true,"help.gif");
  126.         addMenuItem(KeyEvent.VK_A,1"帮助""关于(A)"'0', help,helpMenu,false,null);
  127.         /**设置右键菜单*/
  128.         addPopupMenu(KeyEvent.VK_U, "撤销(U)", mouse, edit);
  129.         addPopupMenu(KeyEvent.VK_R, "恢复(R)", mouse, edit);
  130.         addPopupMenu(KeyEvent.VK_T, "剪切(T)", mouse, edit);
  131.         addPopupMenu(KeyEvent.VK_C, "复制(C)", mouse, edit);
  132.         addPopupMenu(KeyEvent.VK_P, "粘贴(P)", mouse, edit);
  133.         addPopupMenu(KeyEvent.VK_L, "删除(L)", mouse, edit);
  134.         addPopupMenu(KeyEvent.VK_A, "全选(A)", mouse, edit);
  135.         addPopupMenu(KeyEvent.VK_D, "时间/日期(D)", mouse, edit);
  136.         /**设置工具条**/
  137.         addToolBar(0,"新建","new.gif",file);
  138.         addToolBar(1,"打开","open.gif",file);
  139.         addToolBar(2,"保存","save.gif",file);
  140.         addToolBar(3,"撤销","undo.gif",edit);
  141.         addToolBar(4,"恢复","redo.gif",edit);
  142.         addToolBar(5,"剪切","cut.gif",edit);
  143.         addToolBar(6,"复制","copy.gif",edit);
  144.         addToolBar(7,"粘贴","paste.gif",edit);
  145.         addToolBar(8,"删除","delete.gif",edit);
  146.         frame.setVisible(true);
  147.     }
  148.     /**addToolBar()方法用来设置工具条***/
  149.     private void addToolBar(int num,String label,String icon,ActionListener listen) {
  150.         JButton button=new JButton(new ImageIcon(icon));
  151.         button.setToolTipText(label);  //设置提示信息
  152.         toolbar.add(button);           //添加按键
  153.         button.addActionListener(listen);   //添加监听
  154.         toolbar.addSeparator();            //添加分隔条
  155.         switch(num){
  156.             case 0:newButton=button;break;
  157.             case 1:openButton=button;break;
  158.             case 2:saveButton=button;break;
  159.             case 3:undoButton=button;break;
  160.             case 4:redoButton=button;break;
  161.             case 5:cutButton=button;break;
  162.             case 6:copyButton=button;break;
  163.             case 7:pasteButton=button;break;
  164.             case 8:deleteButton=button;break;
  165.         }
  166.     }
  167.     /**addText()方法用来设置右键菜单*/
  168.     private void addPopupMenu(int num, String label, MouseListener listen1,ActionListener listen2) {
  169.         display.add(popupmenu);
  170.         JMenuItem menuItem = new JMenuItem(label);
  171.         menuItem.setMnemonic(num);
  172.         if (label.equals("剪切(T)") || label.equals("全选(A)"))
  173.             popupmenu.addSeparator();          //添加分隔条
  174.         popupmenu.add(menuItem);
  175.         display.addMouseListener(listen1);//注册监听器的接口MouseListener
  176.         menuItem.addActionListener(listen2);//注册监听器的接口ActionListener
  177.     }
  178.     /**addMenuItem()方法用来设置菜单*/
  179.     private void addMenuItem(int count,int num, String menulabel, String itemlabel,
  180.             char shortlabel, ActionListener listen,JMenu menu,boolean bool,String icon) {
  181.         JMenuItem menuItem;
  182.         if(bool) menuBar.add(menu);        
  183.         if(icon!=null){
  184.          menuItem = new JMenuItem(itemlabel,new ImageIcon(icon));
  185.         }
  186.         else  menuItem=new JMenuItem(itemlabel);
  187.         menuItem.setMnemonic(count);  //添加快捷方式
  188.         if (shortlabel != '0')
  189.             menuItem.setAccelerator(KeyStroke.getKeyStroke(shortlabel,KeyEvent.CTRL_MASK));//添加组合快捷键的操作
  190.         menuItem.addActionListener(listen);//注册监听器的接口ActionListener
  191.         /*设置文件*/
  192.         if (menulabel.equals("文件"))  {
  193.             fileMenu.add(menuItem);
  194.             if(num==3) fileMenu.addSeparator();
  195.         }
  196.         /*设置编辑*/
  197.         else if (menulabel.equals("编辑")) {
  198.             editMenu.add(menuItem);
  199.             switch (num) {
  200.                 case 0:undoItem = menuItem; //撤销
  201.                 undoItem.setEnabled(false);
  202.                 break;
  203.                 case 1: redoItem=menuItem;         //恢复
  204.                 redoItem.setEnabled(false);
  205.                 editMenu.addSeparator();break;
  206.                 case 5:                                                                         //删除
  207.                     menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
  208.                     editMenu.addSeparator(); break;
  209.                 case 6:findItem = menuItem;
  210.                 findItem.setEnabled(false);break;//查找
  211.                 case 7:findnextItem = menuItem;   //查找下一个
  212.                 findnextItem.setEnabled(false);
  213.                 menuItem.setAccelerator(KeyStroke.getKeyStroke("F3"));break;
  214.                 case 10:menuItem.setAccelerator(KeyStroke.getKeyStroke("F5")); //时间/日期
  215.             }
  216.         }
  217.         /*设置格式*/
  218.         else if (menulabel.equals("格式")) {
  219.             switch (num) {
  220.                 case 0:formatMenu.add(menuItem);     //插入
  221.                 formatMenu.addSeparator(); break;
  222.                 case 1:formatMenu.add(menuItem);break;     //字体
  223.                 case 2:JMenu colorMenu = new JMenu(itemlabel);   //颜色
  224.                 formatMenu.add(colorMenu);
  225.                 JMenuItem backColor = new JMenuItem("背景颜色(B)");
  226.                 JMenuItem fontColor = new JMenuItem("字体颜色(F)");                              
  227.                 colorMenu.add(backColor);
  228.                 colorMenu.addSeparator();
  229.                 colorMenu.add(fontColor);
  230.                 colorMenu.setMnemonic(KeyEvent.VK_C);
  231.                 backColor.setMnemonic(KeyEvent.VK_B);
  232.                 fontColor.setMnemonic(KeyEvent.VK_F);
  233.                 backColor.addActionListener(listen);//注册监听器的接口ActionListener
  234.                 fontColor.addActionListener(listen);//注册监听器的接口ActionListener
  235.                 break;
  236.                 case 3:                                 //视图风格
  237.                     JMenu styleMenu= new JMenu(itemlabel);
  238.                     styleMenu.setMnemonic(KeyEvent.VK_S);
  239.                     formatMenu.add(styleMenu);
  240.                     styleMenu.add(metal);
  241.                     styleMenu.add(windows);
  242.                     styleMenu.add(motif);
  243.                     metal.addActionListener(listen);
  244.                     windows.addActionListener(listen);
  245.                     motif.addActionListener(listen);  break;
  246.                 case 4:formatMenu.add(menuItem);
  247.                 menuItem.setAction( new StyledEditorKit.UnderlineAction()); //添加加下划线侦听器
  248.                 menuItem.setText("下划线(U)");
  249.                 break;
  250.             }
  251.         }
  252.         /*设置查看*/
  253.         else if (menulabel.equals("查看")) {                          
  254.                 if(num==1)viewMenu.add(menuItem);   //字数统计            
  255.         }
  256.         /*设置帮助*/
  257.         else if (menulabel.equals("帮助")) {
  258.             helpMenu.add(menuItem);
  259.             if (num==0)
  260.                 helpMenu.addSeparator(); //帮助主题
  261.         }
  262.     }
  263.     /***************************************************************
  264.      *    Note类的内部类的相关操作
  265.      **************************************************************/
  266.     /** 内部类fileAction,用来处理文件菜单事件 **/
  267.     public class fileAction implements ActionListener {
  268.         //重写actionPerformed方法
  269.         public void actionPerformed(ActionEvent e) {
  270.             String command = e.getActionCommand();
  271.             if (command == "新建(N)"||e.getSource()==newButton) {
  272.                 if(change) {
  273.                     newflag=true;
  274.                     exitText();
  275.                     newflag=false;
  276.                 } else {
  277.                     frame.dispose();                 
  278.                     new Note();
  279.                 }
  280.             } else if (command == "打开(O)..."||e.getSource()==openButton)
  281.             {
  282.                if(change) {
  283.                    openflag=true;
  284.                     exitText();
  285.                     openflag=false;                    
  286.                 } else 
  287.                  openFile();
  288.             }
  289.             else if (command == "保存(S)"||e.getSource()==saveButton)
  290.                 saveFile();
  291.             else if (command == "另存为(A)...")
  292.                 saveAsFile();
  293.             else if (command == "退出(X)"){
  294.                 if(change) {
  295.                     exitflag=true;
  296.                     exitText();
  297.                     exitflag=false;
  298.                 } else   frame.dispose();
  299.             }
  300.         }
  301.     }
  302.     /** 内部类editAction,用来处理编辑菜单事件 **/
  303.     public class editAction implements ActionListener {
  304.         //  重写actionPerformed方法
  305.         public void actionPerformed(ActionEvent e) {
  306.             String command = e.getActionCommand();
  307.             if (command == "撤销(U)"||e.getSource()==undoButton) {                
  308.                 if(undomang.canUndo())
  309.                     undomang.undo();               
  310.                 redoItem.setEnabled(true);                
  311.             }else if(command=="恢复(R)"||e.getSource()==redoButton){                 
  312.                 if (undomang.canRedo())
  313.                     undomang.redo();
  314.                 else
  315.                     redoItem.setEnabled(false);                  
  316.             }else if (command == "剪切(T)"||e.getSource()==cutButton)
  317.                 display.cut();      //剪切所选的文本到剪贴板里
  318.             else if (command == "复制(C)"||e.getSource()==copyButton)
  319.                 display.copy();     //复制所选的文本放到剪贴板里
  320.             else if (command == "粘贴(P)"||e.getSource()==pasteButton)
  321.                 display.paste();    //取得剪贴板里的内容粘贴到display里
  322.             else if (command == "删除(L)"||e.getSource()==deleteButton)   //启动删除            
  323.                 display.replaceSelection("");                                     
  324.             else if (command == "查找(F)") {           //启动查找
  325.                 new FindDialog(frame,"查找",false);
  326.             }else if (command == "查找下一个(N)") {   //启动查找下一个
  327.                 if(selectflag)
  328.                     new FindDialog(frame,"查找",false);
  329.                 else if (FindDialog.matcher.find(Note.display.getCaretPosition()))    //使用find()方法查找第一个匹配的对象
  330.                     display.select(FindDialog.matcher.start(), FindDialog.matcher.start()+FindDialog.findText.getText().length());
  331.                 else
  332.                     JOptionPane.showMessageDialog(null,"找不到 /""+FindDialog.findText.getText()+"/"","文本编辑器",JOptionPane.WARNING_MESSAGE);
  333.             } else if (command == "替换(E)")              //开启替换对话框
  334.                 new ChangeDialog(frame,"替换",false);
  335.             else if (command == "全选(A)")            //全选
  336.                 display.selectAll();
  337.             else if (command == "时间/日期(D)") {
  338.                 Calendar now = Calendar.getInstance();//取得系统的时间
  339.                 int year = now.get(Calendar.YEAR);
  340.                 int month = now.get(Calendar.MONTH) + 1;
  341.                 int date = now.get(Calendar.DATE);
  342.                 int hour = now.get(Calendar.HOUR_OF_DAY);
  343.                 int minute = now.get(Calendar.MINUTE);
  344.                 display.replaceSelection(hour + ":" + minute + " " + year + "-" + month + "-"+ date);
  345.             }
  346.         }
  347.     }    
  348.     /** 内部类formatAction,用来处理格式菜单事件 **/
  349.     public class formatAction implements ActionListener {
  350.         //重写actionPerformed方法
  351.         public void actionPerformed(ActionEvent e) {
  352.             String command = e.getActionCommand();
  353.             if (command == "插入图片(W)") {
  354.                 JFileChooser open = new JFileChooser(); // 查找文件
  355.                  open.addChoosableFileFilter(new JpgFileFilter());
  356.                  open.addChoosableFileFilter(new GifFileFilter());
  357.                 int state=open.showOpenDialog(frame);
  358.                 File file=open.getSelectedFile();
  359.                 if(file!=null&&state==JFileChooser.APPROVE_OPTION)
  360.                 insertIcon(file); // 插入图片                    
  361.             }else if (command == "字体(F)") {
  362.                 xp= frame.getX();
  363.                 yp = frame.getY();
  364.                 FontDialog font=new FontDialog(frame,"字体",true);
  365.                 if(!font.sure)
  366.                     return;
  367.                 if(font_type==0){bold=false;italic=false;}
  368.                 else if(font_type==1){ bold=true;italic=false;}
  369.                 else if(font_type==2){ bold=false;italic=true;} 
  370.                 else {bold=true;italic=true;}
  371.                 if(display.getSelectedText()==null)
  372.                     display.setFont(font.myfont);
  373.                 else{
  374.                     createStyle("Style",styledDoc,font_size,bold,italic,display.getSelectedTextColor(),font_name);
  375.                     insertDoc(styledDoc,display.getSelectedText(),"Style");
  376.                 }
  377.             }else if (command == "背景颜色(B)") {
  378.                 color = JColorChooser.showDialog(container, "请选择背景颜色", color);
  379.                 if (color == null)
  380.                     color = display.getBackground();
  381.                 display.setBackground(color);
  382.                 
  383.             }else if (command == "字体颜色(F)") {
  384.                 color = JColorChooser.showDialog(container, "请选择字体颜色", color);
  385.                 if (color == null)
  386.                     color =Color.BLACK;
  387.                 if(display.getSelectedText()==null)
  388.                     display.setForeground(color);
  389.                 else{
  390.                     createStyle("style",styledDoc,font_size,bold,italic,color,font_name);
  391.                     insertDoc(styledDoc,display.getSelectedText(),"style");
  392.                 }
  393.             } else if(command=="MOTIF风格"){
  394.                 try {
  395.                     UIManager.setLookAndFeel(looks[1].getClassName());
  396.                     SwingUtilities.updateComponentTreeUI( frame );
  397.                 }catch ( Exception ea ) {}
  398.             }else if(command=="默认风格"){
  399.                 try {
  400.                     UIManager.setLookAndFeel(looks[0].getClassName());
  401.                     SwingUtilities.updateComponentTreeUI(frame);
  402.                 }catch ( Exception eb ) {}
  403.             }else if(command=="系统风格"){
  404.                 try {
  405.                     UIManager.setLookAndFeel(looks[3].getClassName());
  406.                     SwingUtilities.updateComponentTreeUI( frame );
  407.                 }catch ( Exception ea ) {}
  408.             }
  409.         }
  410.     }
  411.     /** 内部类viewAction,用来处理查看菜单事件 **/
  412.     public class viewAction implements ActionListener {
  413.         public void actionPerformed(ActionEvent e) {
  414.             String command = e.getActionCommand();
  415.             int length=0,blank=0,row=0,columns=1;
  416.             String space="",line="",text="",other="    ";
  417.             if(command=="字数统计(W)"){
  418.                 if (display.getSelectedText() == null)
  419.                     text=display.getText();
  420.                 else text=display.getSelectedText();
  421.                 length=text.length();
  422.                 for(int i=0;i<length;i++)
  423.                     if(text.charAt(i)==' ')  blank++; //比较字符是不是空格
  424.                     else if(String.valueOf(text.charAt(i)).equals("/n"))
  425.                         row++;
  426.                 for(int i=0;i<70;i++){
  427.                     space+=" ";
  428.                     if(i<50)
  429.                         line+="-";
  430.                 }
  431.                 String message="/n字数"+other+space+(length-2*row-blank)+
  432.                         "/n字符数"+space+(length-2*row)+
  433.                         "/n空格数"+space+blank+
  434.                         "/n行数"+other+space+(row+1);
  435.                 Object[] options = {"关闭"};
  436.                 JOptionPane.showOptionDialog(frame,"统计信息:"+line+message, "字数统计",
  437.                         JOptionPane.DEFAULT_OPTION,JOptionPane.CLOSED_OPTION,null, options,options[0]);
  438.             }
  439.         }
  440.     }
  441.     /** 内部类helpAction,用来处理帮助菜单事件 **/
  442.     public class helpAction implements ActionListener {
  443.         public void actionPerformed(ActionEvent e) {
  444.             String command=e.getActionCommand();
  445.             if(command=="关于(A)")
  446.                 new AboutDialog(frame,"关干 文本编辑器",true);
  447.             else if(command=="帮助主题(H)")
  448.                 new HelpTheme();
  449.         }
  450.     }
  451.     /** 内部类mouseAction,用来处理鼠标事件 **/
  452.     public class mouseAction extends MouseAdapter {
  453.         public void mouseReleased(MouseEvent e) {
  454.             if (e.isPopupTrigger())
  455.                 popupmenu.show(display, e.getX(), e.getY());//显示右键菜单
  456.         }
  457.     }
  458.     /**内部类documentlis用来处理文档内容变化事件***/
  459.     public class documentLis implements DocumentListener{
  460.         public void changedUpdate(DocumentEvent arg0) {           
  461.             change=true;                   
  462.         }
  463.         public void insertUpdate(DocumentEvent arg0) {          
  464.             change=true;
  465.             undoItem.setEnabled(true);
  466.             findItem.setEnabled(true);
  467.             findnextItem.setEnabled(true);                  
  468.         }
  469.         public void removeUpdate(DocumentEvent arg0) {           
  470.             change=true;            
  471.         }       
  472.     }
  473.     /***********************************************
  474.      * Note类里面的方法操作
  475.      * ****************************************************/   
  476.     public void insertIcon(File file) {          //插入图片的方法
  477.         display.setCaretPosition(styledDoc.getLength()); // 设置插入位置
  478.         display.insertIcon(new ImageIcon(file.getPath())); // 插入图片
  479.     }
  480.     public void insertDoc(StyledDocument styledDoc, String content,String currentStyle) {
  481.         try {
  482.             int len=display.getSelectedText().length();
  483.             styledDoc.insertString(display.getCaretPosition(),content,styledDoc.getStyle(currentStyle));
  484.             display.replaceSelection("");
  485.             display.select(display.getCaretPosition()-len,display.getCaretPosition());
  486.         } catch (Exception e) {}
  487.     }
  488.     public void createStyle(String style,StyledDocument doc,int size,boolean bold,boolean italic,Color color,String fontName) {
  489.         Style sys = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
  490.         try {
  491.             doc.removeStyle(style);
  492.         } catch(Exception e) {}  //先删除这种Style,假使他存在
  493.         Style s = doc.addStyle(style,sys); // 加入
  494.         StyleConstants.setFontSize(s,size); // 大小
  495.         StyleConstants.setBold(s,bold); // 粗体
  496.         StyleConstants.setItalic(s,italic); // 斜体
  497.         StyleConstants.setForeground(s,color); // 颜色
  498.         StyleConstants.setFontFamily(s,fontName);  // 字体
  499.     }
  500.     public void  openFile(){              //打开文件
  501.         JFileChooser open= new JFileChooser();
  502.         open.addChoosableFileFilter(new JavaFileFilter());
  503.         open.addChoosableFileFilter(new TxtFileFilter());
  504.         // 设置默认的文件管理器。如果不设置,则最后添加的文件过滤器为默认过滤器.这里设置为txtFilter
  505.         int state = open.showOpenDialog(frame);// 弹出文件选择窗口,点击确定返回一个整数
  506.         File file = open.getSelectedFile();
  507.         /*JFileChooser.APPROVE_OPTION常量存储着确定按钮对应的整数*/
  508.         if (file != null && state == JFileChooser.APPROVE_OPTION){
  509.             currentFile=file;                        
  510.             display.setText("");
  511.             frame.setTitle(file.getName()+" - 文字编辑");
  512.             try {
  513.                 FileReader readFile=new FileReader(file.getAbsolutePath());//文件的读取
  514.                 int len=(int)file.length();
  515.                 char []buffer=new char[len];
  516.                 readFile.read(buffer,0,len);
  517.                 display.setText(new String(buffer));
  518.                 readFile.close();
  519.             } catch (Exception e) { }
  520.              change=false;        //打开一个文件之后把文档内容变化标记变量设为false
  521.         }        
  522.     }
  523.     public void saveAsFile() {          //另存为
  524.         JFileChooser save=new  JFileChooser();
  525.         save.addChoosableFileFilter(new JavaFileFilter());
  526.         save.addChoosableFileFilter(new TxtFileFilter());
  527.         save.setDialogTitle("另存为");
  528.         int state = save.showSaveDialog(frame);
  529.         File file=save.getSelectedFile();                       
  530.         if (file != null && state == JFileChooser.APPROVE_OPTION){     
  531.              /**正则表达式用来查看输入的文件名是否有后缀名 */
  532.          Pattern pattern=Pattern.compile("//.//w*",Pattern.CASE_INSENSITIVE);      
  533.          Matcher matcher = pattern.matcher(file.getAbsolutePath()); 
  534.          if(!matcher.find()){             
  535.           file=new File(file.getAbsolutePath().concat(".txt")); 
  536.          }      
  537.             currentFile=file;                    
  538.             try {
  539.                 FileWriter target = new FileWriter(currentFile.getAbsolutePath());
  540.                 target.write(display.getText());
  541.                 frame.setTitle(currentFile.getName()+ " - 文字编辑");
  542.                 target.close();
  543.             } catch (Exception e) { }
  544.             change=false;
  545.         }        
  546.     }
  547.     public void saveFile(){            //保存
  548.         if (currentFile != null){
  549.             try{
  550.                 FileWriter file = new FileWriter(currentFile);
  551.                 file.write(display.getText());
  552.                 file.close();
  553.             }catch(Exception e){ }
  554.             change=false;
  555.         }else   saveAsFile();
  556.     }
  557.     public void exitText(){   //退出文本的相关操作
  558.         String path="无标题";
  559.         if(currentFile!=null)
  560.             path=currentFile.getAbsolutePath();
  561.         int num =JOptionPane.showConfirmDialog(container,"文件 "+ path +" 的文字已经改变。想要保存文件吗?""文字编辑",
  562.                 JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE);        
  563.         if(num==0) saveFile();       
  564.         else if(num==1&&newflag){frame.dispose();new Note();} 
  565.         else if(num==1&&exitflag){frame.dispose();} 
  566.         else if(num==1&&windowflag){System.exit(0);}
  567.         else if(num==1&&openflag) openFile();
  568.     }
  569. }
  570. /*********用干文件过滤的外部类***********/
  571. class GifFileFilter extends FileFilter{
  572.     public String getDescription(){
  573.         return "gif源文件(*.gif)";
  574.     }
  575.     public boolean accept(File file) {
  576.         return  file.getName().toLowerCase().endsWith(".gif");
  577.     }
  578. }
  579. class JpgFileFilter extends FileFilter{
  580.     public String getDescription(){
  581.         return "jpg源文件(*.jpg)";
  582.     }
  583.     public boolean accept(File file) {
  584.         return  file.getName().toLowerCase().endsWith(".jpg");
  585.     }
  586. }
  587. class JavaFileFilter extends FileFilter {
  588.     public String getDescription() {
  589.         return "java源文件(*.java)";
  590.     }
  591.     public boolean accept(File file) {
  592.         return file.getName().toLowerCase().endsWith(".java");
  593.     }
  594. }
  595. class TxtFileFilter extends FileFilter {
  596.     public String getDescription() {
  597.         return "文本文档(*.txt)";
  598.     }
  599.     public boolean accept(File file) {
  600.         return file.getName().toLowerCase().endsWith(".txt");
  601.     }
  602. }
  603. package javadesign;
  604. import java.awt.*;
  605. import java.awt.event.*;
  606. import java.util.regex.Matcher;
  607. import java.util.regex.Pattern;
  608. import javax.swing.*;
  609. import javax.swing.border.*;
  610. /*************************************************
  611.  * 类FindDialog用来进行查找
  612.  *
  613.  ***********************************************/
  614. public class FindDialog extends JDialog implements ActionListener{
  615.     private JLabel findLabel=new JLabel("输入要查找的内容:");
  616.     public static JTextField findText = new JTextField(15);
  617.     private JButton buttonNext = new JButton("查找下一个");
  618.     private ButtonGroup group=new ButtonGroup();
  619.     private JButton buttonCancel = new JButton("取消");
  620.     private JRadioButton findUp=new JRadioButton("向上",false);
  621.     private JRadioButton findDown=new JRadioButton("向下",true);
  622.     private JCheckBox letter=new JCheckBox("区分大小写",false);
  623.     private Container container=this.getContentPane();
  624.     private JPanel findPanel=new JPanel();
  625.     private JPanel buttonPanel=new JPanel();
  626.     private JPanel aspectPanel=new JPanel();
  627.     Pattern pattern ;
  628.     // 用Pattern类的matcher()方法生成一个Matcher对象
  629.     public static Matcher matcher ;
  630.     boolean begin=true ,letterflag=true,updownflag=false;
  631.     int judge=Pattern.CASE_INSENSITIVE; //区分大小写的值为1,不区别为2,此时judge=2
  632.     int startp,len,count=1;
  633.     
  634.     public FindDialog(Frame frame,String title,boolean modal){
  635.         super(frame,title,modal);
  636.         this.setSize(380150);
  637.         this.setResizable(false);
  638.         setLocation(Note.xp+ 50, Note.yp+ 150);
  639.         buttonNext.setEnabled(false);
  640.         findText.addKeyListener(new KeyAdapter() {
  641.             public void keyReleased(KeyEvent e) {
  642.                 if(findText.getText().length()!=0)
  643.                     buttonNext.setEnabled(true);
  644.                 else
  645.                     buttonNext.setEnabled(false);
  646.             }
  647.         });
  648.         group.add(findUp);
  649.         group.add(findDown);
  650.         container.setLayout(null);
  651.         findPanel.setLayout(new GridLayout(1,2));
  652.         buttonPanel.setLayout(new GridLayout(2,1,0,5));
  653.         aspectPanel.setLayout(new GridLayout(1,2));
  654.         findPanel.add(findLabel);
  655.         findPanel.add(findText);
  656.         buttonPanel.add(buttonNext);
  657.         buttonPanel.add(buttonCancel);
  658.         aspectPanel.add(findUp);
  659.         aspectPanel.add(findDown);
  660.         findPanel.setBounds(10,10,250,25);
  661.         buttonPanel.setBounds(265,10,100,50);
  662.         letter.setBounds(10,70,100,20);
  663.         aspectPanel.setBounds(120,50,140,50);
  664.         //建立类型为凸起的边框
  665.         Border border=BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
  666.         //建立边框式为border,标题为"方向"的TitledBorder
  667.         aspectPanel.setBorder(BorderFactory.createTitledBorder(border,"方向"));
  668.         container.add(findPanel);
  669.         container.add(buttonPanel);
  670.         container.add(letter);
  671.         container.add(aspectPanel);
  672.         buttonNext.addActionListener(this);
  673.         findUp.addActionListener(this);
  674.         findDown.addActionListener(this);
  675.         buttonCancel.addActionListener(this);
  676.         findText.addActionListener(this);
  677.         letter.addActionListener(this);
  678.         this.setVisible(true);
  679.     }
  680.     public void actionPerformed(ActionEvent e) {
  681.         if(e.getSource()==buttonNext||e.getSource()==findText) {
  682.             Note.selectflag=false;
  683.             switch(count) {
  684.                 case 0:String leave=Note.display.getText().substring(0,Note.display.getCaretPosition());
  685.                 if(leave.matches(findText.getText())||Note.display.getCaretPosition()-len<=0) {
  686.                     JOptionPane.showMessageDialog(null,"找不到 /""+findText.getText()+"/"","文本编辑器",JOptionPane.WARNING_MESSAGE);
  687.                     //Note.display.select(startp, startp+len);
  688.                     break;
  689.                 }
  690.                 Note.display.select(0, Note.display.getCaretPosition()-len);
  691.                 startp=Note.display.getSelectedText().lastIndexOf(findText.getText());
  692.                 len=findText.getText().length();
  693.                 Note.display.select(startp, startp+len);
  694.                 break;
  695.                 case 1:if(begin){
  696.                     try{
  697.                         Note.selectflag=false;
  698.                         //编译模式,参数findText.getText()表示输入的正则表达式,judge表示模式类型
  699.                         pattern=Pattern.compile(findText.getText(),judge);
  700.                         //获取匹配器,Note.display.getText()为待处理的字符串
  701.                         matcher = pattern.matcher(Note.display.getText());  //用Pattern类的matcher()方法生成一个Matcher对象
  702.                         begin=false;
  703.                     }catch(Exception ev){}
  704.                 }
  705.                 if (matcher.find(Note.display.getCaretPosition()))    //从光标处开始匹配模式
  706.                     Note.display.select(matcher.start(), matcher.end());
  707.                 else
  708.                     JOptionPane.showMessageDialog(null,"找不到 /""+findText.getText()+"/"","文本编辑器",JOptionPane.WARNING_MESSAGE);
  709.                 break;
  710.             }
  711.         } else if(e.getSource()==findUp)
  712.             count=0;
  713.         else if(e.getSource()==findDown){
  714.             begin=true;
  715.             count=1;
  716.         } else if(e.getSource()==buttonCancel)
  717.             this.setVisible(false);
  718.         else if(e.getSource()==letter) {
  719.             if(letterflag){judge=1;letterflag=false;} else {judge=2;letterflag=true;}
  720.             begin=true;
  721.         }
  722.     }
  723. }
  724. package javadesign;
  725. import java.awt.*;
  726. import java.awt.event.*;
  727. import javax.swing.*;
  728. public class AboutDialog extends JDialog {
  729.     
  730.     private JLabel iconLabel;  //用来放图片
  731.     private JTextArea word; //用来放说明
  732.     private JPanel panel;
  733.     private Container container;
  734.     private Note note=new Note();
  735.     
  736.     public AboutDialog(Frame frame,String title, boolean modal){
  737.         super(frame,title,modal);
  738.         this.setSize(415,400);
  739.         this.setLocation(Note.xp+50,Note.yp+150);
  740.         this.setResizable(false);
  741.         container=this.getContentPane();
  742.         iconLabel=new JLabel(new ImageIcon("top.gif"));
  743.         word=new JTextArea();
  744.         panel=new JPanel(new BorderLayout());
  745.         panel.add(iconLabel,"North");
  746.         panel.add(word,"Center");
  747.         container.setLayout(new BorderLayout());//设置布局
  748.         container.add(panel,"Center");
  749.         /**相关信息*/
  750.         String wordString="  Java编写的作品--/n" +
  751.                 "/t实现Windows记事本大部分功能/n"+
  752.                 "/t扩展了部分功能/n/n"+
  753.                 "  关干文本编辑器的制作者/n"+
  754.                 "/t学校:桂林电子科技大学/n"+
  755.                 "/t学院:  计算机与控制学院/n"+
  756.                 "/t专业:  软件工程/n"+
  757.                 "/t姓名:  陈剑龙/n"+
  758.                 "/t联系方式(QQ): 631818332";
  759.         Color backColor=new Color(200,255,255); //自定义颜色
  760.         word.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,20)); //设置字体
  761.         word.setBackground(backColor);      //设置背景色
  762.         word.setForeground(Color.blue);    //设置前景色
  763.         word.setText(wordString);      //把wordstring放入到word组件里
  764.         word.setEditable(false);
  765.         this.setVisible(true);
  766.     }
  767. }
  768. package javadesign;
  769. import java.awt.*;
  770. import java.io.*;
  771. import javax.swing.*;
  772. import javax.swing.event.*;
  773. import javax.swing.tree.*;
  774. import java.awt.event.*;
  775. public class HelpTheme extends JFrame implements ActionListener{
  776.     Container container=this.getContentPane();
  777.     File currentFile;
  778.     JPanel indexpanel=new JPanel(new BorderLayout());
  779.     JPanel searchpanel=new JPanel(new BorderLayout());
  780.     JPanel listpanel=new JPanel(new BorderLayout());
  781.     JPanel rightpanel=new JPanel(new BorderLayout());
  782.     int leftX=275,leftY=225;
  783.     int rightpanelX=275,rightpanelY=225;
  784.     JToolBar toolbar=new JToolBar();
  785.     JButton indexshowbutton=new JButton("显示(D)");
  786.     JButton searchshowbutton=new JButton("显示(D)");
  787.     JButton searchthemebutton=new JButton("列出主题(L)");
  788.     JButton button=new JButton("隐藏");
  789.     JButton backbutton=new JButton("后退");
  790.     JButton forebutton=new JButton("前进");
  791.     JTextArea rightpanelarea=new JTextArea();
  792.     JTextField searchfield=new JTextField();
  793.     JTextField indexfield=new JTextField();
  794.     JTextField index=new JTextField("键入要查找的关键字(W):");
  795.     JTextField search=new JTextField("键入要查找的关键字(W):");
  796.     JTextField searchnext=new JTextField("选择要显示的主题(T):");
  797.     JList indexlist=new JList();
  798.     JList searchlist=new JList();
  799.     JScrollPane indexscroll=new JScrollPane(indexlist);
  800.     JScrollPane searchscroll=new JScrollPane(searchlist);
  801.     JSplitPane split;
  802.     boolean flag=true;
  803.     Box indexboxup=Box.createVerticalBox();                    //创建列型盒
  804.     Box indexboxdown=Box.createHorizontalBox();
  805.     Box searchboxup=Box.createVerticalBox();
  806.     Box searchboxcenter=Box.createHorizontalBox();
  807.     Box searchboxdown=Box.createHorizontalBox();
  808.     JTabbedPane lefttab=new JTabbedPane(JTabbedPane.TOP);
  809.     /*建立JTabbedPane对象,索引卡显示位置为上方*/
  810.     ///////////////////////////////////////
  811.     DefaultMutableTreeNode node1,node2,node3;
  812.     DefaultMutableTreeNode root=new DefaultMutableTreeNode("文本编辑器");
  813.     JTree tree;
  814.     public HelpTheme() {
  815.         this.setTitle("帮助主题");
  816.         this.setLocation(400,200);       
  817.         indexboxup.add(Box.createVerticalStrut(8));
  818.         index.setEditable(false);
  819.         index.setFont(new Font("宋体",Font.BOLD,13));
  820.         index.setBackground(new Color(238,238,238));
  821.         indexboxup.add(index);
  822.         indexboxup.add(indexfield);
  823.         indexboxup.add(Box.createVerticalStrut(8));
  824.         indexpanel.add(indexboxup,"North");
  825.         indexpanel.add(indexscroll,"Center");
  826.         indexboxdown.add(Box.createHorizontalStrut(leftX-113));
  827.         indexboxdown.add(indexshowbutton);
  828.         indexpanel.add(indexboxdown,"South");       
  829.         searchboxup.add(Box.createVerticalStrut(8));
  830.         search.setEditable(false);
  831.         search.setFont(new Font("宋体",Font.BOLD,13));
  832.         search.setBackground(new Color(238,238,238));
  833.         searchboxup.add(search);
  834.         searchboxup.add(searchfield);
  835.         searchboxup.add(Box.createVerticalStrut(8));
  836.         searchboxcenter.add(Box.createHorizontalStrut(leftX-140));
  837.         searchboxcenter.add(searchthemebutton);
  838.         searchboxup.add(searchboxcenter);
  839.         searchboxup.add(Box.createVerticalStrut(8));
  840.         searchnext.setEditable(false);
  841.         searchnext.setFont(new Font("宋体",Font.BOLD,13));
  842.         searchnext.setBackground(new Color(238,238,238));
  843.         searchboxup.add(searchnext);
  844.         searchboxup.add(Box.createVerticalStrut(8));
  845.         searchpanel.add(searchboxup,"North");
  846.         searchpanel.add(searchscroll,"Center");
  847.         searchboxdown.add(Box.createHorizontalStrut(leftX-113));
  848.         searchboxdown.add(searchshowbutton);
  849.         searchpanel.add(searchboxdown,"South");        
  850.         lefttab.add("目录(C)",listpanel);
  851.         lefttab.add("索引(N)",indexpanel);
  852.         lefttab.add("搜索(S)",searchpanel);       
  853.         addTree("/"文本编辑器/"概述");
  854.         addTree("查找特定的字符或词");
  855.         addTree("查找并替换特定的字或词");
  856.         addTree("根据窗口大小换行");
  857.         addTree("转到特定行");
  858.         addTree("更改字形和大小");
  859.         addTree("在文档中插入时间和日期");
  860.         tree=new JTree(root);  //建立JTree对象tree
  861.         tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//只能选取一个节点
  862.         tree.addMouseListener(new mouseAction());
  863.         listpanel.add(tree,"North");
  864.         ///////////////////////////////////////////////////////////
  865.         toolbar.add(button);
  866.         toolbar.addSeparator();
  867.         toolbar.addSeparator();
  868.         rightpanel.add(rightpanelarea);      
  869.         String string="/"文本编辑器概述/""+
  870.               "   在文件菜单里面实现了新建文本编辑器,打开文件,保存文件,另存为文件,退出文本编辑器.功能"+
  871.            "在编辑菜单里面实现了撤销,恢复,剪切,复制,粘贴,删除,查找,查找下一个,替换,"+
  872.                "全选,时间/日期.功能"+
  873.               "在格式菜单上实现了插入图片,改变字体,改变字体颜色,背景颜色,视图风格,增加下划线功能"+
  874.           "在查看菜单上实现了状态栏,字数统计功能"+
  875.               "在帮助菜单中现了帮助主题,关干的功能.";
  876.         rightpanelarea.setFont(new Font("楷体",Font.BOLD,25));
  877.         rightpanelarea.setText(string);        
  878.         toolbar.setEnabled(false);
  879.         rightpanelarea.setLineWrap(true);
  880.         //rightpanelarea.setEditable(false);
  881.         split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,false,lefttab,rightpanel);
  882.         /*设置split的分隔线位置,以像素为计算单位*/
  883.         split.setDividerLocation(leftX-30);
  884.              /*设置JSplitPane是否可以展开或收起(如同文件总管一般),设为true表示打开此功能。
  885.               */
  886.         //split.setOneTouchExpandable(true);
  887.         split.setDividerSize(10); //设置分隔线宽度的大小,以像素为计算单位。
  888.         container.add(split);
  889.         container.add(toolbar,"North");
  890.         this.setSize(leftX+rightpanelX,leftY+rightpanelY);
  891.         this.setVisible(true);
  892.         button.addActionListener(this);
  893.     }
  894.     ////////////////////////////////////////////
  895.     public void addTree(String string) {
  896.         DefaultMutableTreeNode node=new DefaultMutableTreeNode(string);
  897.         root.add(node);
  898.     }
  899.     /////////////////////////////////////
  900.     class   mouseAction  extends   MouseAdapter {
  901.         public   void   mousePressed(MouseEvent   e)   {
  902.             int selRow=tree.getRowForLocation(e.getX(),e.getY());
  903.             System.out.println("选择了第几行"+selRow);
  904.             switch(selRow) {
  905.                 case 1:break;
  906.                 case 2:break;
  907.                 case 3:break;
  908.                 case 4:break;
  909.                 case 5:break;
  910.                 case 6:break;
  911.                 case 7:break;
  912.                 case 8:break;
  913.                 case 9:break;
  914.                 case 12:break;
  915.             }
  916.         }
  917.     }
  918.     public void actionPerformed(ActionEvent e) {
  919.         if(e.getSource()==button) {
  920.             if(flag){
  921.                 split.setDividerSize(0);
  922.                 lefttab.setVisible(false);
  923.                 button.setText("显示");
  924.                 this.setSize(rightpanelX+30,leftY+rightpanelY);
  925.                 this.setLocation(this.getX()+leftX-30,this.getY());
  926.                 flag=false;
  927.             } else {
  928.                 split.setDividerSize(10);
  929.                 lefttab.setVisible(true);
  930.                 button.setText("隐藏");
  931.                 split.setDividerLocation(leftX-30);
  932.                 this.setSize(leftX+rightpanelX,leftY+rightpanelY);
  933.                 this.setLocation(this.getX()-leftX+30,this.getY());
  934.                 flag=true;
  935.             }
  936.         }
  937.     }
  938. }
  939. package javadesign;
  940. import java.awt.*;
  941. import java.awt.event.*;
  942. import javax.swing.*;
  943. import javax.swing.border.*;
  944. /****************************************************************
  945.  *
  946.  *       类FontDialog用来设置字体
  947.  *
  948.  ********************************************************/
  949. public class FontDialog extends JDialog implements ActionListener {
  950.     private String font[];
  951.     private JLabel fontLabel, fontTypeLabel, fontSizeLabel, fontShowLabel;
  952.     private JList fontList, fontTypeList, fontSizeList;
  953.     private JTextField fontField, fontTypeField, fontSizeField,fontShowField;
  954.     private JScrollPane fontScroll, fontTypeScroll, fontSizeScroll;
  955.     public static JButton sureButton, cancelButton;
  956.     private JPanel panel = new JPanel();
  957.     public static Font myfont;
  958.     private Container container = getContentPane();
  959.     public FontDialog(Frame frame,String title, boolean modal){
  960.         super(frame,title,modal);
  961.         container.setLayout(null);
  962.         setLocation(Note.xp + 50, Note.yp + 150);
  963.         setResizable(false);
  964.         setSize(420300);
  965.         fontLabel = new JLabel("字体(F):");
  966.         fontField = new JTextField(Note.font_name);
  967.         GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment();
  968.         font = g.getAvailableFontFamilyNames();//获得系统支持的所有字体列表
  969.         fontList = new JList(font);
  970.         fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 设为单选模式
  971.         fontScroll = new JScrollPane(fontList);
  972.         ///////////////////////////////////////////////////////////////////////
  973.         fontTypeLabel = new JLabel("字形(Y):");
  974.         String[] data = { "常规""斜体""粗体""粗斜体" };
  975.         fontTypeList = new JList(data);
  976.         if (Note.font_type == 0)
  977.             fontTypeField = new JTextField("常规");
  978.         else if (Note.font_type == 1)
  979.             fontTypeField = new JTextField("粗体");
  980.         else if (Note.font_type == 2)
  981.             fontTypeField = new JTextField("斜体");
  982.         else  fontTypeField = new JTextField("粗斜体");
  983.         fontTypeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 设为单选模式
  984.         fontTypeScroll = new JScrollPane(fontTypeList);
  985.         ///////////////////////////////////////////////////////////////
  986.         fontSizeLabel = new JLabel("大小(S):");
  987.         String size[] = new String[100];
  988.         for (int i = 10; i <= 100; i++) {
  989.             size[i - 10] = String.valueOf(i);
  990.         }
  991.         fontSizeList = new JList(size);
  992.         fontSizeField = new JTextField(""+Note.font_size);
  993.         fontSizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 设为单选模式
  994.         fontSizeScroll = new JScrollPane(fontSizeList);
  995.         /////////////////////////////////////////////////////////////////
  996.         sureButton = new JButton("确定");
  997.         cancelButton = new JButton("取消");
  998.         fontShowLabel = new JLabel("示例");
  999.         fontShowField = new JTextField("字体AaBbYy");
  1000.         Border inside = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
  1001.         fontShowField.setBorder(BorderFactory.createTitledBorder(inside));
  1002.         fontShowField.setEditable(false);
  1003.         fontShowField.setHorizontalAlignment(fontShowField.CENTER);
  1004.         fontShowField.setFont(myfont);
  1005.         fontLabel.setBounds(10516220);
  1006.         fontField.setBounds(102516220);
  1007.         fontScroll.setBounds(1045162140);
  1008.         fontTypeLabel.setBounds(177510020);
  1009.         fontTypeField.setBounds(1772510020);
  1010.         fontTypeScroll.setBounds(17745100140);
  1011.         fontSizeLabel.setBounds(28255020);
  1012.         fontSizeField.setBounds(282255020);
  1013.         fontSizeScroll.setBounds(2824550140);
  1014.         sureButton.setBounds(337256020);
  1015.         cancelButton.setBounds(337506020);
  1016.         fontShowLabel.setBounds(17719510020);
  1017.         fontShowField.setBounds(17721520045);
  1018.         /////////////////////////////////////////////////////////////
  1019.         container.add(fontLabel);
  1020.         container.add(fontField);
  1021.         container.add(fontScroll);
  1022.         container.add(fontTypeLabel);
  1023.         container.add(fontTypeField);
  1024.         container.add(fontTypeScroll);
  1025.         container.add(fontSizeLabel);
  1026.         container.add(fontSizeField);
  1027.         container.add(fontSizeScroll);
  1028.         container.add(sureButton);
  1029.         container.add(cancelButton);
  1030.         container.add(fontShowLabel);
  1031.         container.add(fontShowField);
  1032.         ////////////////////////////////////////////////////////////////
  1033.         MouseListener mouseListener = new MouseAdapter() {
  1034.             public void mouseClicked(MouseEvent e) {
  1035.                 mouseClick(e);
  1036.             }
  1037.         };
  1038.         fontList.addMouseListener(mouseListener);
  1039.         fontTypeList.addMouseListener(mouseListener);
  1040.         fontSizeList.addMouseListener(mouseListener);
  1041.         sureButton.addActionListener(this);
  1042.         cancelButton.addActionListener(this);
  1043.         this.setVisible(true);
  1044.     }
  1045.     public void mouseClick(MouseEvent e) {
  1046.         if (e.getSource() == fontList) {
  1047.             Note.font_name = fontList.getSelectedValue().toString();
  1048.             fontField.setText(Note.font_name);
  1049.         } else if (e.getSource() == fontTypeList)
  1050.             fontTypeField.setText(fontTypeList.getSelectedValue() .toString());
  1051.         else if (e.getSource() == fontSizeList) {
  1052.             fontSizeField.setText(fontSizeList.getSelectedValue().toString());
  1053.             Note.font_size= Integer.parseInt(fontSizeField.getText());
  1054.         }
  1055.         show_Font();
  1056.     }
  1057.     public void actionPerformed(ActionEvent e) {
  1058.         if (e.getSource() == sureButton)
  1059.             // Note.display.setFont(myfont);
  1060.             setVisible(false);
  1061.         else if (e.getSource() == cancelButton)
  1062.             setVisible(false);
  1063.     }
  1064.     public void show_Font() {
  1065.         if (fontTypeField.getText().equals("常规"))
  1066.             Note.font_type = 0;
  1067.         else if (fontTypeField.getText().equals("斜体"))
  1068.             Note.font_type = 2;
  1069.         else if (fontTypeField.getText().equals("粗体"))
  1070.             Note.font_type = 1;
  1071.         else if (fontTypeField.getText().equals("粗斜体"))
  1072.             Note.font_type = 3;
  1073.         myfont = new Font(Note.font_name, Note.font_type, Note.font_size);
  1074.         fontShowField.setFont(myfont);
  1075.     }
  1076. }
  1077. package javadesign;
  1078. import java.awt.*;
  1079. import javax.swing.*;
  1080. import java.awt.event.*;
  1081. import java.util.regex.*;
  1082. /*******************************************
  1083. * 利用ChangeDialog来替换
  1084. *******************************/
  1085. public class ChangeDialog extends JDialog implements ActionListener{
  1086.     private JLabel findLabel,changeLabel;
  1087.     private JTextField findField,changeField;
  1088.     private JCheckBox letter=new JCheckBox("区分大小写",false);
  1089.     private JButton findButton,changeButton,changeAllButton,cancelButton;
  1090.     private JPanel buttonPanel,textPanel;
  1091.     private Container container=this.getContentPane();     //获得内容面板
  1092.     Pattern pattern;
  1093.     // 用Pattern类的matcher()方法生成一个Matcher对象
  1094.     Matcher matcher ;
  1095.     boolean start=true,letterflag=true;
  1096.     int judge=Pattern.CASE_INSENSITIVE; //区分大小写的值为1,不区别为2,此时judge=2
  1097.     public   ChangeDialog(Frame frame,String title,boolean modal){
  1098.         super(frame,title,modal);   //调用父类的构造方法
  1099.         this.setSize(390,180);     //设置大小
  1100.         setLocation(Note.xp+ 50, Note.yp+ 150);//设置显示的位置
  1101.         this.setResizable(false);            //设置为不可最大化
  1102.         findLabel=new JLabel("输入原始字符:");
  1103.         changeLabel=new JLabel("输入替换字符:");
  1104.         findField=new JTextField(10);
  1105.         changeField=new JTextField(10);
  1106.         findButton=new JButton("查找下一个");
  1107.         changeButton=new JButton("替换");
  1108.         changeAllButton=new JButton("全部替换");
  1109.         cancelButton=new JButton("取消");
  1110.         buttonPanel=new JPanel();
  1111.         textPanel=new JPanel();
  1112.         buttonPanel.setLayout(new GridLayout(4,1,5,5));
  1113.         textPanel.setLayout(new GridLayout(2,2,5,5));
  1114.         textPanel.add(findLabel);
  1115.         textPanel.add(findField);
  1116.         textPanel.add(changeLabel);
  1117.         textPanel.add(changeField);
  1118.         buttonPanel.add(findButton);
  1119.         buttonPanel.add(changeButton);
  1120.         buttonPanel.add(changeAllButton);
  1121.         buttonPanel.add(cancelButton);
  1122.         container.setLayout(null);
  1123.         textPanel.setBounds(10,10,250,50);
  1124.         buttonPanel.setBounds(270,10,100,100);
  1125.         letter.setBounds(10,90,10020);
  1126.         container.add(textPanel);
  1127.         container.add(buttonPanel);
  1128.         container.add(letter);
  1129.         findButton.setEnabled(false);
  1130.         changeButton.setEnabled(false);
  1131.         changeAllButton.setEnabled(false);
  1132.         findField.addKeyListener(new KeyAdapter() {
  1133.             public void keyReleased(KeyEvent e) {
  1134.                 if(findField.getText().length()!=0) {
  1135.                     findButton.setEnabled(true);
  1136.                     changeButton.setEnabled(true);
  1137.                     changeAllButton.setEnabled(true);
  1138.                 } else {
  1139.                     findButton.setEnabled(false);
  1140.                     changeButton.setEnabled(false);
  1141.                     changeAllButton.setEnabled(false);
  1142.                 }
  1143.             }
  1144.         });
  1145.         findButton.addActionListener(this);
  1146.         cancelButton.addActionListener(this);
  1147.         findField.addActionListener(this);
  1148.         changeField.addActionListener(this);
  1149.         changeButton.addActionListener(this);
  1150.         changeAllButton.addActionListener(this);
  1151.         cancelButton.addActionListener(this);
  1152.         letter.addActionListener(this);
  1153.         this.setVisible(true);
  1154.     }
  1155.     public void findAndChange(){
  1156.         if(start){
  1157.             try{
  1158.                 pattern = Pattern.compile(findField.getText(),judge);
  1159.                 matcher = pattern.matcher(Note.display.getText());  //用Pattern类的matcher()方法生成一个Matcher对象
  1160.                 start=false;
  1161.             }catch(Exception ev){}
  1162.         }
  1163.         if (matcher.find(Note.display.getCaretPosition()))    //使用find()方法查找第一个匹配的对象
  1164.             Note.display.select(matcher.start(), matcher.end());
  1165.         else
  1166.             JOptionPane.showMessageDialog(null,"找不到 /""+findField.getText()+"/"","文本编辑器",JOptionPane.WARNING_MESSAGE);
  1167.         
  1168.     }
  1169.     public void actionPerformed(ActionEvent e) {
  1170.         if(e.getSource()==findButton||e.getSource()==findField) {
  1171.             findAndChange();
  1172.         }else if(e.getSource()==changeAllButton){
  1173.             Pattern pat = Pattern.compile(findField.getText(),judge);
  1174.             Matcher mat = pat.matcher(Note.display.getText()); //用Pattern类的matcher()方法生成一个Matcher对象
  1175.             Note.display.setText(mat.replaceAll(changeField.getText()));
  1176.         }else if(e.getSource()==cancelButton)
  1177.             this.setVisible(false);
  1178.         else if(e.getSource()==changeButton){
  1179.             if(Note.display.getSelectedText()!=null){
  1180.                 Note.display.replaceSelection(changeField.getText());
  1181.                 start=true;
  1182.             }
  1183.             findAndChange();
  1184.         }else if(e.getSource()==letter) {
  1185.             if(letterflag){judge=1;letterflag=false;} else {judge=2;letterflag=true;}
  1186.             start=true;
  1187.         }
  1188.     }
  1189. }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 联想笔记本屏幕闪屏怎么办 种植牙螺钉掉了怎么办 水管牙断里面了怎么办 水龙头起泡器不起泡怎么办 14mm乘8mm残留怎么办 宝宝吃了螺丝冒怎么办 收割机滚筒皮带轮键槽滚了怎么办 微信界面变小了怎么办 拉杆箱螺丝掉了怎么办 洗衣机应急门锁没有拉绳怎么办? 奔驰glc发动机声音大怎么办 淋膜机模具螺丝拧不动怎么办 一字螺丝滑丝了怎么办 螺丝拧歪卡住了怎么办 车牌螺丝拧歪了怎么办 空心墙打膨胀螺丝打不上怎么办 沉孔内六角螺丝滑丝怎么办 内六角螺丝滑了怎么办? 三色灯不变光了怎么办 卧室灯不变色了怎么办 圆柱齿轮减速机噪音大怎么办 轴与套间隙生锈怎么办 汽车停小区被刮怎么办 下楼梯摔跤了 屁股疼 怎么办 剧烈咳嗽震的肚子疼怎么办 饺子粘在盘子上怎么办 生饺子粘在盘子怎么办 饺子粘在案板上怎么办 饺子冷冻粘起了怎么办 冰箱饺子冻住了怎么办 水饺都冻一块了怎么办 wps卸载了后文件打不开怎么办 六角螺母拧滑了怎么办 梅花内六角螺丝扭滑丝了怎么办 眼镜螺丝滑丝了怎么办 大螺丝拆不下来怎么办 一字螺丝扭不动怎么办 带帽的螺丝拧花怎么办 螺丝拧不出来了怎么办 小六角螺丝滑丝怎么办 螺丝拧不下来了怎么办