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 }
原文地址:https://www.cnblogs.com/xs-yqz/p/4539641.html