運用Java編寫文本編輯器程序

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;


public class EditorJFrame extends JFrame implements ActionListener, MouseListener

{

   private JComboBox combox_name, combox_size;            //字體、字號組合框

   private JCheckBox checkb_bold, checkb_italic;          //粗體、斜體複選框

   private JRadioButton radiob_color[];                   //顏色單選按鈕

   private JTextArea text;                                //文本區

   private Color color;                                   //text的當前文本色

   private JPopupMenu popupmenu;                          //快捷菜單


   public EditorJFrame()

   {

       super("文本編輯器");                               //默認BorderLayout佈局

       Dimension dim = getToolkit().getScreenSize();      //獲得屏幕分辨率

       this.setBounds(dim.width/4,dim.height/4,dim.width/2,dim.height/2);  //窗口居中

       this.setDefaultCloseOperation(EXIT_ON_CLOSE);      //窗口關閉時,程序結束


       text = new JTextArea("Welcome 歡迎");

       text.addMouseListener(this);                       //文本區註冊鼠標事件監聽器

       this.getContentPane().add(new JScrollPane(text));  //文本區添加到滾動窗格,滾動窗格添加到框架內容窗格中部


       JToolBar toolbar=new JToolBar();                   //創建工具欄,默認水平方向

       this.getContentPane().add(toolbar,"North");        //工具欄添加到框架內容窗格北部

       GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();

       String[] fontsName=ge.getAvailableFontFamilyNames(); //獲得系統字體

       combox_name = new JComboBox(fontsName);            //組合框顯示系統字體    

       combox_name.addActionListener(this);               //組合框註冊單擊事件監聽器

       toolbar.add(combox_name);


       String sizestr[]={"20","30","40","50","60","70"};

       combox_size = new JComboBox(sizestr);              //字號組合框

       combox_size.setEditable(true);                     //設置組合框可編輯

       combox_size.addActionListener(this);               //組合框註冊單擊事件監聽器

       toolbar.add(combox_size);


       checkb_bold = new JCheckBox("粗體");               //字形複選框

       toolbar.add(checkb_bold);

       checkb_bold.addActionListener(this);               //複選框註冊單擊事件監聽器

       checkb_italic = new JCheckBox("斜體");

       toolbar.add(checkb_italic);

       checkb_italic.addActionListener(this);


       String colorstr[]={"紅","綠","藍"};

       ButtonGroup bgroup_color = new ButtonGroup();      //按鈕組

       radiob_color = new JRadioButton[colorstr.length];  //顏色單選按鈕數組

       for (int i=0; i<radiob_color.length; i++)

       {

           radiob_color[i]=new JRadioButton(colorstr[i]); //顏色單選按鈕

           radiob_color[i].addActionListener(this);

           bgroup_color.add(radiob_color[i]);             //單選按鈕添加到按鈕組

           toolbar.add(radiob_color[i]);                  //單選按鈕添加到工具欄

       }        

       radiob_color[0].setSelected(true);                 //設置單選按鈕的選中狀態


       this.addmyMenu();                                  //調用自定義方法,添加菜單

       this.setVisible(true);

//        String password = JOptionPane.showInputDialog(this, "密碼");

//        System.out.println(password);                      //單擊"撤消"按鈕返回null

   }


   private void addmyMenu()                               //添加主菜單、快捷菜單、對話框

   {

       JMenuBar menubar = new JMenuBar();                 //菜單欄

       this.setJMenuBar(menubar);                         //框架上添加菜單欄


       String menustr[]={"文件","編輯","幫助"};

       JMenu menu[]=new JMenu[menustr.length];

       for (int i=0; i<menustr.length; i++)

       {

            menu[i] = new JMenu(menustr[i]);              //菜單

            menubar.add(menu[i]);                         //菜單欄中加入菜單

       }

       menu[0].add(new JMenuItem("打開"));                 //生成菜單項並加入到菜單

       menu[0].add(new JMenuItem("保存"));

       menu[0].addSeparator();                            //加分隔線

       JMenuItem menuitem_exit = new JMenuItem("退出");

       menu[0].add(menuitem_exit);

       menuitem_exit.addActionListener(this);             //菜單項註冊單擊事件監聽器


       JMenu menu_style = new JMenu("字形");

       menu_style.add(new JCheckBoxMenuItem("粗體"));

       menu_style.add(new JCheckBoxMenuItem("斜體"));

/*        String stylestr[]={"粗體", "斜體"};

       JCheckBoxMenuItem cbmenuitem_style[]=new JCheckBoxMenuItem[stylestr.length];

       for (int i=0; i<cbmenuitem_style.length; i++)

       {

           cbmenuitem_style[i] = new JCheckBoxMenuItem(stylestr[i]);  //字形複選菜單項

           cbmenuitem_style[i].addItemListener(this);

           menu_style.add(cbmenuitem_style[i]);

       }*/

       menu[1].add(menu_style);                           //菜單加入到菜單中成爲二級菜單


       JMenu menu_color = new JMenu("顏色");

       menu[1].add(menu_color);

       ButtonGroup buttongroup = new ButtonGroup();       //按鈕組

       String colorstr[]={"紅","綠","藍"};

       JRadioButtonMenuItem rbmi_color[]=new JRadioButtonMenuItem[colorstr.length];

       for (int i=0; i<rbmi_color.length; i++)

       {

           rbmi_color[i] = new JRadioButtonMenuItem(colorstr[i]);  //單選菜單項

           buttongroup.add(rbmi_color[i]);                //單選菜單項添加到按鈕組

           rbmi_color[i].addActionListener(this);

           menu_color.add(rbmi_color[i]);                 //單選菜單項添加到菜單

       }        


       popupmenu = new JPopupMenu();                      //快捷菜單對象

       String menuitemstr[]={"剪切","複製","粘貼"};

       JMenuItem popmenuitem[] = new JMenuItem[menuitemstr.length];

       for (int i=0; i<popmenuitem.length; i++)

       {

           popmenuitem[i] = new JMenuItem(menuitemstr[i]); //菜單項

           popupmenu.add(popmenuitem[i]);                  //快捷菜單加入菜單項

           popmenuitem[i].addActionListener(this);

       }

       popmenuitem[0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));//設置快捷鍵Ctrl+X

       popmenuitem[1].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));//設置快捷鍵Ctrl+C

       popmenuitem[2].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));//設置快捷鍵Ctrl+V

       text.add(popupmenu);                               //文本區添加快捷菜單

   }


   public void actionPerformed(ActionEvent e)             //單擊事件處理方法

   {

       if (e.getSource() instanceof JRadioButton)         //選擇一個顏色複選框

       {

           if (e.getSource()==radiob_color[0])

               color = new Color(255,0,0);

           if (e.getSource()==radiob_color[1])

               color = new Color(0,255,0);

           if (e.getSource()==radiob_color[2])

               color = new Color(0,0,255);

           text.setForeground(color);                     //設置文本區顏色

           return;

       }


       if (e.getSource() instanceof JMenuItem)            //單擊菜單項

       {

           if (e.getActionCommand()=="退出")

               if (JOptionPane.showConfirmDialog(this, "終止當前程序運行?")==0)

                   System.exit(0);                        //單擊確認對話框中的“是”按鈕,結束程序運行

           if (e.getActionCommand()=="剪切")

               text.cut();                                //將選中文本剪切送系統剪貼板

           if (e.getActionCommand()=="複製")

               text.copy();                               //將選中文本複製送系統剪貼板

           if (e.getActionCommand()=="粘貼")

               text.paste();                              //將剪貼板的文本粘貼在當前位置

           return;

       }


       if (e.getSource() instanceof JComboBox || e.getSource() instanceof JCheckBox)

       {                                                  //組合框、複選框

           int size=0;

           try

           {

               String fontname = (String)combox_name.getSelectedItem();//獲得字體名

               size = Integer.parseInt((String)combox_size.getSelectedItem());//獲得字號

               if (size<4 || size>120)                    //字號超出指定範圍時,拋出異常對象

                   throw new Exception("SizeException");

               java.awt.Font font = text.getFont();       //獲得文本區的當前字體對象

               int style = font.getStyle();               //獲得字形

               if (e.getSource()==checkb_bold)            //粗體

                   style = style ^ 1;                     //整數的位運算,異或^

               if (e.getSource()==checkb_italic)          //斜體

                   style = style ^ 2;

               text.setFont(new Font(fontname, style, size)); //設置文本區字體

           }

           catch(NumberFormatException nfe)

           {

               JOptionPane.showMessageDialog(this, "\""+(String)combox_size.getSelectedItem()+"\" 不能轉換成整數,請重新輸入!");

           }

           catch(Exception ex)

           {

               if (ex.getMessage()=="SizeException")      //捕獲自己拋出的異常對象

                   JOptionPane.showMessageDialog(this, size+" 字號不合適,請重新輸入!");

           }

           finally{}

       }


       if (e.getSource()==combox_size)                    //單擊字號組合框

       {                    //將新輸入的字號添加到組合框的下拉列表中,先要查找,不添加重複值

           String size = (String)combox_size.getSelectedItem();//獲得當前輸入數據

           int i=0, n=combox_size.getItemCount();         //n獲得組合框的選項數

           while (i<n && size.compareTo((String)combox_size.getItemAt(i))>=0)

           {                                              //size與組合框的選項比較

               if (size.compareTo((String)combox_size.getItemAt(i))==0)

                   return ;                               //相同,不插入

               i++;

           }

           combox_size.insertItemAt(size, i);             //將size插入在組合框的第i項

       }

   }  


   public void mouseClicked(MouseEvent mec)               //鼠標事件處理方法,實現MouseListener接口

   {

       if (mec.getModifiers()==MouseEvent.BUTTON3_MASK)   //單擊的是鼠標右鍵

           popupmenu.show(text,mec.getX(),mec.getY());    //在鼠標單擊處顯示快捷菜單

   }

   public void mousePressed(MouseEvent mep) {}

   public void mouseReleased(MouseEvent mer) {}

   public void mouseEntered(MouseEvent mee) {}

   public void mouseExited(MouseEvent mex) {}

   public void mouseDragged(MouseEvent med) {}


   public static void main(String arg[])

   {

       new EditorJFrame();

   }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章