zoukankan      html  css  js  c++  java
  • java编辑器

      1 package editor;
      2 
      3 import java.io.*;
      4 import java.awt.*;
      5 import java.awt.datatransfer.Clipboard;
      6 import java.awt.datatransfer.DataFlavor;
      7 import java.awt.datatransfer.StringSelection;
      8 import java.awt.datatransfer.Transferable;
      9 import java.awt.event.*;
     10 
     11 import javax.swing.JOptionPane;
     12 
     13  
     14 public class TextMenu {
     15     
     16     public static void main(String[] args) {
     17         new MyMenuFrame(); //创建窗口对象
     18     }
     19 }
     20 
     21 class MyMenuFrame extends Frame{
     22     TextArea text;//定义文本域
     23     FileDialog fileDlg;
     24     String str,fileName;
     25     private Clipboard cb;//系统粘贴板
     26     String board = null;//复制面板
     27     byte byteBuf[] = new byte[10000];
     28     
     29     MenuBar m_MenuBar;//定义菜单条
     30     Menu menuFile,menuEdit,sub_Edit_Font,patternEdit,menuHelp,menuSize;//定义菜单项
     31     MenuItem mi_File_New,mi_File_Open,mi_File_Save,mi_File_Close,mi_File_Exit;//定义File中的菜单子项
     32     MenuItem mi_Edit_Cut,mi_Edit_Copy,mi_Edit_Paste;//定义Edit中的菜单子项
     33     MenuItem pattern_Red,pattern_Blue;//定义格式中的菜单子项
     34     MenuItem size_18,size_19,size_20,size_21,size_22;//定义字号中的菜单子项
     35     MenuItem mi_Help,mi_About;//定义Help中的菜单子项
     36     
     37     CheckboxMenuItem mi_Font_Style,mi_Font_Size;//定义选择式的菜单子项
     38     
     39     PopupMenu popM;//定义弹出式菜单
     40     MenuItem pi_Left,pi_Center,pi_Right;//定义弹出菜单中的菜单子项
     41     
     42     Color oldColor;
     43     int text_Font_Style,new_Style,text_Font_Size,new_Size;
     44     String name;
     45     public MyMenuFrame() {
     46         // TODO 自动生成的构造函数存根======构造函数
     47         super("简易文本编辑器");
     48         fileDlg = new FileDialog(this, fileName);
     49         text = new TextArea(5,30);
     50         text.addMouseListener(new HandleMouse());//响应文本域的鼠标事件===调用内部类
     51         add(text,BorderLayout.CENTER);//将文本域加到窗体的中央位置=====边界布局
     52         
     53         m_MenuBar = new MenuBar();//创建菜单条
     54         
     55         menuFile = new Menu("文件");
     56         mi_File_New = new MenuItem("新建");
     57         mi_File_New.setShortcut(new MenuShortcut(KeyEvent.VK_N));//指定快捷键
     58         mi_File_Open = new MenuItem("打开");
     59         mi_File_Open.setShortcut(new MenuShortcut(KeyEvent.VK_O));//指定快捷键
     60         mi_File_Save = new MenuItem("保存");
     61         mi_File_Save.setShortcut(new MenuShortcut(KeyEvent.VK_S));//指定快捷键
     62         mi_File_Close = new MenuItem("关闭");
     63         mi_File_Exit = new MenuItem("退出");
     64         //接下来是使菜单项响应动作事件
     65         mi_File_New.addActionListener(new HandleAct());
     66         mi_File_Open.addActionListener(new HandleAct());
     67         mi_File_Save.addActionListener(new HandleAct());
     68         mi_File_Close.addActionListener(new HandleAct());
     69         mi_File_Exit.addActionListener(new HandleAct());
     70         //把菜单子项加入到菜单项
     71         menuFile.add(mi_File_New);
     72         menuFile.add(mi_File_Open);
     73         menuFile.add(mi_File_Save);
     74         menuFile.add(mi_File_Close);
     75         menuFile.addSeparator();//加一条横向分割线
     76         menuFile.add(mi_File_Exit);
     77         
     78         
     79         menuEdit = new Menu("编辑");
     80         mi_Edit_Copy = new MenuItem("复制");
     81         mi_Edit_Copy.setShortcut(new MenuShortcut(KeyEvent.VK_C));
     82         mi_Edit_Cut = new MenuItem("剪切");
     83         mi_Edit_Cut.setShortcut(new MenuShortcut(KeyEvent.VK_X));
     84         mi_Edit_Paste = new MenuItem("粘贴");
     85         mi_Edit_Paste.setShortcut(new MenuShortcut(KeyEvent.VK_V));
     86         sub_Edit_Font = new Menu("字体");
     87         mi_Font_Style = new CheckboxMenuItem("粗体");
     88         mi_Font_Size = new CheckboxMenuItem("加大");
     89         //接下来是使菜单项响应动作事件
     90         mi_Edit_Copy.addActionListener(new HandleAct());
     91         mi_Edit_Cut.addActionListener(new HandleAct());
     92         mi_Edit_Paste.addActionListener(new HandleAct());
     93         //选择式菜单命令监听者
     94         mi_Font_Style.addItemListener(new HandleItemB());
     95         mi_Font_Size.addItemListener(new HandleItemSize());
     96         //把菜单子项加入到菜单项
     97         sub_Edit_Font.add(mi_Font_Style);
     98         sub_Edit_Font.add(mi_Font_Size);
     99         menuEdit.add(mi_Edit_Copy);
    100         menuEdit.add(mi_Edit_Cut);
    101         menuEdit.add(mi_Edit_Paste);
    102         menuEdit.addSeparator();//加一条横向分割线
    103         menuEdit.add(sub_Edit_Font);
    104         
    105         
    106         patternEdit =new Menu("格式");
    107         pattern_Blue = new MenuItem("蓝色");
    108         pattern_Red = new MenuItem("红色");
    109         //添加注册事件
    110         pattern_Blue.addActionListener(new HandleAct());
    111         pattern_Red.addActionListener(new HandleAct());
    112         //添加到容器中
    113         patternEdit.add(pattern_Blue);
    114         patternEdit.add(pattern_Red);
    115         
    116         menuSize = new Menu("字号");
    117         size_18 = new MenuItem("18");
    118         size_19 = new MenuItem("19");
    119         size_20 = new MenuItem("20");
    120         size_21 = new MenuItem("21");
    121         size_22 = new MenuItem("22");
    122         //添加注册事件
    123         size_18.addActionListener(new HandleAct());
    124         size_19.addActionListener(new HandleAct());
    125         size_20.addActionListener(new HandleAct());
    126         size_21.addActionListener(new HandleAct());
    127         size_22.addActionListener(new HandleAct());
    128         //添加到相应的容器
    129         menuSize.add(size_18);
    130         menuSize.add(size_19);
    131         menuSize.add(size_20);
    132         menuSize.add(size_21);
    133         menuSize.add(size_22);
    134         
    135         
    136         menuHelp = new Menu("帮助");
    137         mi_Help = new MenuItem("帮助");
    138         mi_About = new MenuItem("关于");
    139         //添加注册事件
    140         mi_Help.addActionListener(new HandleAct());
    141         mi_About.addActionListener(new HandleAct());
    142         //添加到相应的容器
    143         menuHelp.add(mi_Help);
    144         menuHelp.add(mi_About);
    145         
    146         //添加到菜单栏中
    147         m_MenuBar.add(menuFile);//把“文件”加载到菜单条中
    148         m_MenuBar.add(menuEdit);//把“编辑”加载到菜单条中
    149         m_MenuBar.add(patternEdit);//把“格式”加载到菜单条中
    150         m_MenuBar.add(menuSize);
    151         m_MenuBar.add(menuHelp);//把“帮助”加载到菜单条中
    152         
    153         this.setMenuBar(m_MenuBar);//把菜单条加载到整个Frame容器中
    154         
    155         //创建弹出式菜单
    156         popM = new PopupMenu();
    157         //给弹出菜单创建菜单项
    158         pi_Left = new MenuItem("左对齐");
    159         pi_Right = new MenuItem("右对齐");
    160         pi_Center= new MenuItem("居中对齐");
    161         //给菜单项添加事件监听
    162         pi_Left.addActionListener(new HandleAct());
    163         pi_Right.addActionListener(new HandleAct());
    164         pi_Center.addActionListener(new HandleAct());
    165         //为弹出菜单添加菜单项
    166         popM.add(pi_Left);
    167         popM.add(pi_Right);
    168         popM.add(pi_Center);
    169         //将弹出菜单加在文本域上
    170         text.add(popM);
    171         
    172         addWindowListener(new HandleClose());//将Frame 注册给窗口事件的监听者
    173         setSize(600,400);
    174         setVisible(true);
    175         name = (text.getFont()).getName();//获取文本域字体
    176         
    177         text_Font_Style = (text.getFont()).getStyle();//获取文本域样式
    178         new_Style = text_Font_Style;
    179         text_Font_Size = (text.getFont()).getSize();
    180         new_Size = text_Font_Size;
    181     }//构造函数定义结束
    182     
    183     //事件处理开始
    184     class HandleMouse extends MouseAdapter{//内部类(处理文本域中的鼠标事件)
    185         @Override
    186         public void mouseReleased(MouseEvent e) {//鼠标按键松开事件弹出菜单
    187             // TODO 自动生成的方法存根
    188             if (e.isPopupTrigger()) {//检测鼠标事件是否由弹出菜单引发
    189                 popM.show((Component)e.getSource(),e.getX(),e.getY());
    190             }//将弹出菜单显示在用户鼠标点击的地方
    191             super.mouseReleased(e);
    192         }
    193     }
    194     class HandleAct implements ActionListener{//内部类。处理菜单命令
    195 
    196         public void actionPerformed(ActionEvent e) {
    197             // TODO 自动生成的方法存根
    198             Font oldF = text.getFont();//获取当前就字体
    199             String name = oldF.getName();//保存当前旧字体的字体类型
    200             int size = oldF.getSize();//保存当前字体的大小
    201             switch (e.getActionCommand()) {
    202             // File菜单的事件响应
    203                 case "新建" :
    204                     newFile();
    205                     break;
    206                 case "打开" :
    207                     openFile();
    208                     break;
    209                 case "保存" :
    210                     saveFile();
    211                     break;
    212                 case "关闭" :
    213                     closeFile();
    214                     break;
    215                 case "退出" :
    216                     exit();
    217                     break;
    218                 // Edit菜单事件响应
    219                 case "剪切" :
    220                     cutText();
    221                     break;
    222                 case "复制" :
    223                     copyText();
    224                     break;
    225                 case "粘贴" :
    226                     pasteText();
    227                     break;
    228                 //格式菜单响应事件
    229                  case "蓝色" :
    230                      turnBlue();
    231                      break;
    232                  case "红色" :
    233                      turnRed();
    234                      break;
    235                      //字号菜单响应事件
    236                  case "18" :
    237                      //Font对象有三个参数:字体,字型,字号
    238                      text.setFont(new Font(name,oldF.getStyle(),18));
    239                      break;
    240                  case "19" :
    241                      text.setFont(new Font(name,oldF.getStyle(),19));
    242                      break;
    243                  case "20" :
    244                      text.setFont(new Font(name,oldF.getStyle(),20));
    245                      break;
    246                  case "21" :
    247                      text.setFont(new Font(name,oldF.getStyle(),21));
    248                      break;
    249                  case "22" :
    250                      text.setFont(new Font(name,oldF.getStyle(),22));
    251                      break;
    252                 // Help菜单事件响应
    253                 case "帮助" :
    254                     help();
    255                     break;
    256                 case "关于" :
    257                     about();
    258                     break;
    259                 default :
    260                     break;
    261               }
    262             
    263         }
    264         public void newFile() {
    265             JOptionPane.showMessageDialog(null, "内容已被更改,是否保存");
    266             saveFile();
    267         }
    268         public void openFile() {
    269             fileDlg.show();
    270             /*fileDlg = new FileDialog(this,"打开文件",FileDialog.LOAD);
    271             fileDlg.setDirectory("");
    272             fileDlg.setVisible(true);*/
    273             fileName = fileDlg.getFile();
    274             /*try {
    275                 File myfile = new File(fileDlg.getDirectory(),fileDlg.getTitle());
    276                 RandomAccessFile raf = new RandomAccessFile(myfile, "r");
    277                 while (raf.getFilePointer()<raf.length()) {
    278                     text.append(raf.readLine()+"
    ");//读文件并加载到text中
    279                 }
    280             } catch (IOException e) {
    281                 // TODO: handle exception
    282                 System.err.println(e.toString());
    283             }*/
    284 
    285             try {
    286                 FileInputStream in = new FileInputStream(fileName);
    287                 in.read(byteBuf);
    288                 in.close();
    289                 str = new String(byteBuf);
    290                 text.setText(str);
    291                 setTitle("TextEditor-" + fileName);
    292             } catch (IOException ioe) {
    293             }
    294         }
    295         public void saveFile() {
    296             fileDlg.show();
    297             fileName = fileDlg.getFile();
    298             str = text.getText();
    299             byteBuf = str.getBytes();
    300             try {
    301                 FileOutputStream out = new FileOutputStream(fileName);
    302                 out.write(byteBuf);
    303                 out.close();
    304             } catch (IOException ioe) {
    305                 
    306             }
    307         }
    308         public void closeFile(){
    309             text.setText(null);
    310         }
    311         public void exit() {
    312             dispose();
    313             System.exit(0);
    314         }
    315         public void copyText(){//复制
    316             board = text.getSelectedText();
    317             cb.setContents(new StringSelection(board), null);
    318         }
    319         public void cutText() {//剪切
    320             board = text.getSelectedText();
    321             cb.setContents(new StringSelection(board), null);
    322             text.replaceRange("", text.getSelectionStart(),
    323                     text.getSelectionEnd());
    324         }
    325         public void pasteText() {//粘贴
    326             try {
    327                 Transferable content = cb.getContents(null);
    328                 String st = (String) content
    329                         .getTransferData(DataFlavor.stringFlavor);
    330                 text.replaceRange(st, text.getSelectionStart(),
    331                         text.getSelectionEnd());
    332             } catch (Exception ex) {
    333             }
    334         }
    335         public void turnBlue() {
    336             
    337         }
    338         public void turnRed() {
    339             
    340         }
    341         public void help() {
    342             
    343         }
    344         public void about() {
    345             
    346         }
    347     }
    348 
    349     class HandleItemB implements ItemListener{//内部类 (处理"粗体")
    350         @Override
    351         public void itemStateChanged(ItemEvent e) {//响应选择型菜单项
    352             // TODO 自动生成的方法存根
    353             Font oldF = text.getFont();//获取当前就字体
    354             String name = oldF.getName();//保存当前旧字体的字体类型
    355             int size = oldF.getSize();//保存当前字体的大小
    356             if (((CheckboxMenuItem)e.getSource()).getState()){//查看是否选中
    357                  text.setFont(new Font(name,Font.BOLD,size));
    358             } else {//未选中
    359                 new_Style = text_Font_Style;
    360                 text.setFont(new Font(name,new_Style,new_Size));
    361             }
    362         }
    363     }
    364     
    365     class HandleItemSize implements ItemListener{//内部类  处理大字体
    366         @Override
    367         public void itemStateChanged(ItemEvent e) {//响应选择型菜单项
    368             // TODO 自动生成的方法存根
    369             Font oldF = text.getFont();//获取当前就字体
    370             String name = oldF.getName();//保存当前旧字体的字体类型
    371             int size = oldF.getSize();//保存当前字体的大小
    372             if (((CheckboxMenuItem)e.getSource()).getState()){//查看是否选中
    373                 new_Size = text_Font_Size*2;
    374                 text.setFont(new Font(name,new_Style,new_Size));
    375             } else {
    376                 new_Size = text_Font_Size;
    377                 text.setFont(new Font(name,new_Style,new_Size));
    378             }
    379         }
    380     }
    381 
    382     class HandleClose extends WindowAdapter{//内部类 (处理窗口事件)
    383         @Override
    384         public void windowClosing(WindowEvent e) {
    385             // TODO 自动生成的方法存根
    386             dispose();
    387             System.exit(0);//退出程序
    388             super.windowClosing(e);
    389         }
    390     }
    391 }
  • 相关阅读:
    Vi与Vim
    Linux文件压缩、打包、备份
    Linux文件与目录操作
    Linux文件权限与目录
    Linux学习笔记
    Android——复制项目出现Application Installation Failed
    《鸟哥的Linux私房菜》学习笔记0——计算机概论
    Android——自定义多击事件
    《跟孩子学Python》
    《简明Python教程》读书笔记
  • 原文地址:https://www.cnblogs.com/xs-yqz/p/4539641.html
Copyright © 2011-2022 走看看