运行结果截图如下:
- /**
- 作者:wwj
- 日期:2012/4/18
- 功能:利用图像用户界面高级组件实现简单记事本
- 说明:
- (1)创建一个名为“简单记事本”窗口,在窗口中添加一个带有滚动条的文本区。
- (2)在窗口中添加一个具有以下菜单的菜单栏:
- 1.“文件”菜单,包含“打开”、“保存”、“退出”的菜单项,菜单间加分隔线,
- 添加事件处理方法,使菜单具有打开、保存文件及退出的功能。
- 2.“编辑”菜单,包含“复制”、“剪切”、“粘贴”的菜单项,添加事件处理方法,
- 使菜单具有“复制”、“剪切”、“粘贴”的功能。
- 3.“格式”菜单,包含“格式设置”的二级子菜单;而二级“格式设置”子菜单,
- 包含“自动换行”、“取消自动换行”、“断行不断字”、“取消断行不断字”的菜单项,添加事件处理方法,
- 设置文本框自动换行和断行不断字的格式。
- (提示:JTextArea类中,使用setLineWrap(true)方法设置自动换行,使用setWrapStyleword(true)方法设置断行不断字,参考书本例8.7)
- (3)在窗口中添加工具栏,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”图片按钮的工具栏,
- 添加事件处理方法,单击相应的按钮能实现相应的功能。
- (4)在窗口中添加弹出式菜单,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”的菜单项,
- 直接添加分隔线,添并加事件处理方法,选择相应的菜单项能实现相应的功能。
- **/
- importjava.awt.*;
- importjavax.swing.*;
- importjava.awt.event.*;
- importjava.io.*;
- publicclassNodepadextendsJFrame
- {
- privateJTextAreaeditor;
- privateContainerc;
- privateFontf=newFont("sanserif",Font.PLAIN,12);
- //菜单栏成员属性声明
- privateJMenuBarmb;//菜单棒
- privateJMenufileMenu;//文件菜单
- privateJMenueditMenu;//编辑菜单
- privateJMenuformatMenu;//格式菜单
- privateJMenuItemfileMenuOpen,fileMenuSave,fileMenuExit;//文件菜单的菜单项
- privateJMenuItemeditMenuCopy,editMenuCut,editMenuPaste;//编辑菜单的菜单项
- privateJMenuformatSet;//格式菜单第一级菜单
- privateJMenuItemlineWrap,cancleLineWrap,wrapStyleWord,cancleWrapStyleWord;//格式菜单的第二级菜单
- //工具栏成员属性声明
- privateJToolBartoolBar;//工具棒
- privateJButtonb1,b2,b3,b4,b5;//声明5个按钮,分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴”
- //弹出式菜单属性声明
- privateJPopupMenupm;
- privateJMenuItemitem1,item2,item3,item4,item5;
- publicNodepad()
- {
- super("简单记事本");
- setSize(400,300);
- try{
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- }catch(Exceptione){System.err.println("不能被设置外观的原因:"+e);}
- c=getContentPane();//创建一个内容面板
- editor=newJTextArea();//创建一个文本区
- c.add(newJScrollPane(editor));//设置滚动条,并添加到内容面板
- //菜单栏的实现
- //文件菜单的实现
- mb=newJMenuBar();//创建菜单棒
- fileMenu=newJMenu("文件(F)");//创建菜单
- fileMenuOpen=newJMenuItem("打开(O)...Ctrl+O");
- fileMenuSave=newJMenuItem("保存(S)...Ctrl+S");
- fileMenuExit=newJMenuItem("退出");
- JMHandlerJM=newJMHandler();//创建监听器
- fileMenuOpen.addActionListener(JM);//注册监听器
- fileMenuSave.addActionListener(JM);
- fileMenuExit.addActionListener(JM);
- fileMenu.add(fileMenuOpen);
- fileMenu.add(fileMenuSave);
- fileMenu.addSeparator();//添加分隔线
- fileMenu.add(fileMenuExit);
- fileMenu.setFont(f);//设置菜单中文体的字体
- //编辑菜单的实现
- editMenu=newJMenu("编辑(E)");
- editMenuCopy=newJMenuItem("复制(C)Ctrl+C");
- editMenuCut=newJMenuItem("剪切(T)Ctrl+X");
- editMenuPaste=newJMenuItem("粘贴(P)Ctrl+v");
- EMHandlerEM=newEMHandler();//创建监听器
- editMenuCopy.addActionListener(EM);//注册监听器
- editMenuCut.addActionListener(EM);
- editMenuPaste.addActionListener(EM);
- editMenu.add(editMenuCopy);
- editMenu.add(editMenuCut);
- editMenu.add(editMenuPaste);
- editMenu.setFont(f);
- //格式菜单的实现
- formatMenu=newJMenu("格式(O)");//创建菜单
- formatSet=newJMenu("格式设置");//二级菜单
- lineWrap=newJMenuItem("自动换行");//二级菜单项
- cancleLineWrap=newJMenuItem("取消自动换行");
- wrapStyleWord=newJMenuItem("断行不断字");
- cancleWrapStyleWord=newJMenuItem("取消断行不断字");
- FMHandlerFM=newFMHandler();//创建事件监听器
- lineWrap.addActionListener(FM);//注册二级菜单项的监听器
- cancleLineWrap.addActionListener(FM);
- wrapStyleWord.addActionListener(FM);
- cancleWrapStyleWord.addActionListener(FM);
- formatSet.add(lineWrap);
- formatSet.add(cancleLineWrap);
- formatSet.addSeparator();//添加分隔线
- formatSet.add(wrapStyleWord);
- formatSet.add(cancleWrapStyleWord);
- formatMenu.add(formatSet);
- formatMenu.setFont(f);
- //将菜单全部添加菜单棒里
- mb.add(fileMenu);
- mb.add(editMenu);
- mb.add(formatMenu);
- //工具栏的实现
- //按钮分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴”
- toolBar=newJToolBar();//创建工具棒
- b1=newJButton(newImageIcon("img/open.gif"));
- b2=newJButton(newImageIcon("img/save.gif"));
- b3=newJButton(newImageIcon("img/copy.gif"));
- b4=newJButton(newImageIcon("img/cut.gif"));
- b5=newJButton(newImageIcon("img/paste.gif"));
- TBHandlerTB=newTBHandler();//创建按钮监听器
- b1.addActionListener(TB);b2.addActionListener(TB);
- b3.addActionListener(TB);b4.addActionListener(TB);
- b5.addActionListener(TB);
- //把按钮全部添加到工具棒中
- toolBar.add(b1);toolBar.add(b2);
- toolBar.add(b3);toolBar.add(b4);
- toolBar.add(b5);
- //弹出菜单的实现
- pm=newJPopupMenu();//创建弹出菜单
- item1=newJMenuItem("打开");
- item2=newJMenuItem("保存");
- item3=newJMenuItem("复制");
- item4=newJMenuItem("剪切");
- item5=newJMenuItem("粘贴");
- JPHandlerJP=newJPHandler();
- item1.addActionListener(JP);//注册菜单项的鼠标事件监听器
- item2.addActionListener(JP);
- item3.addActionListener(JP);
- item4.addActionListener(JP);
- item5.addActionListener(JP);
- editor.addMouseListener(JP);//注册文本区的鼠标事件监听器
- pm.add(item1);pm.add(item2);
- pm.add(item3);pm.add(item4);
- pm.add(item5);
- //把菜单栏、工具栏、弹出菜单添加到内容面板
- setJMenuBar(mb);//显示菜单栏
- c.add(toolBar,BorderLayout.NORTH);
- setVisible(true);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- //自定义类实现文件菜单项的事件处理
- privateclassJMHandlerimplementsActionListener
- {
- publicvoidactionPerformed(ActionEvente)
- {
- if(e.getSource()==fileMenuOpen){loadFile();}
- elseif(e.getSource()==fileMenuSave){saveFile();}
- else{System.exit(0);}
- }
- }
- publicvoidloadFile()//打开文件方法
- {
- JFileChooserfc=newJFileChooser();
- intr=fc.showOpenDialog(this);
- if(r==JFileChooser.APPROVE_OPTION)
- {
- Filefile=fc.getSelectedFile();
- try{editor.read(newFileReader(file),null);}
- catch(IOExceptione){}
- }
- }
- publicvoidsaveFile()//保存文件的方法
- {
- JFileChooserfc=newJFileChooser();
- intr=fc.showSaveDialog(this);
- if(r==JFileChooser.APPROVE_OPTION)
- {
- Filefile=fc.getSelectedFile();
- try{editor.write(newFileWriter(file));}
- catch(IOExceptione){}
- }
- }
- //编辑菜单菜单项的事件处理
- privateclassEMHandlerimplementsActionListener
- {
- publicvoidactionPerformed(ActionEvente)
- {
- if(e.getSource()==editMenuCopy)//实现复制功能
- {
- editor.copy();
- editor.requestFocus();
- }
- elseif(e.getSource()==editMenuCut)//实现剪切功能
- {
- editor.cut();
- editor.requestFocus();
- }
- else//实现粘贴功能
- {
- editor.paste();
- editor.requestFocus();
- }
- }
- }
- //格式菜单二级菜单的菜单项的事件处理
- privateclassFMHandlerimplementsActionListener
- {
- publicvoidactionPerformed(ActionEvente)
- {
- if(e.getSource()==lineWrap){editor.setLineWrap(true);}
- elseif(e.getSource()==cancleLineWrap){editor.setLineWrap(false);}
- elseif(e.getSource()==wrapStyleWord){editor.setWrapStyleWord(true);}
- else{editor.setWrapStyleWord(false);}
- }
- }
- //自定义类实现工具栏的按钮事件处理
- privateclassTBHandlerimplementsActionListener
- {
- publicvoidactionPerformed(ActionEvente)
- {
- if(e.getSource()==b1){loadFile();}//实现打开文件功能
- elseif(e.getSource()==b2){saveFile();}//实现保存文件功能
- elseif(e.getSource()==b3)//文件复制
- {
- editor.copy();
- editor.requestFocus();
- }
- elseif(e.getSource()==b4)//文件剪切
- {
- editor.cut();
- editor.requestFocus();
- }
- else//文件粘贴
- {
- editor.paste();
- editor.requestFocus();
- }
- }
- }
- //自定义类实现弹出式菜单的事件处理
- privateclassJPHandlerimplementsActionListener,MouseListener
- {
- publicvoidactionPerformed(ActionEvente)
- {
- if(e.getSource()==item1){loadFile();}//实现打开文件功能
- elseif(e.getSource()==item2){saveFile();}//实现保存文件功能
- elseif(e.getSource()==item3)//文件复制
- {
- editor.copy();
- editor.requestFocus();
- }
- elseif(e.getSource()==item4)//文件剪切
- {
- editor.cut();
- editor.requestFocus();
- }
- else//文件粘贴
- {
- editor.paste();
- editor.requestFocus();
- }
- }
- publicvoidmouseReleased(MouseEvente)
- {
- if(e.isPopupTrigger())//判断是否按下鼠标右键
- pm.show(editor,e.getX(),e.getY());//显示弹出式菜单
- }
- publicvoidmouseClicked(MouseEvente){}
- publicvoidmouseEntered(MouseEvente){}
- publicvoidmouseExited(MouseEvente){}
- publicvoidmousePressed(MouseEvente){}
- }
- publicstaticvoidmain(String[]args)
- {
- NodepadN=newNodepad();
- }
- }