版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第17章简易记事本
——工具栏与菜单能力目标:学会使用工具栏、菜单栏和弹出(快捷)菜单。能运用工具栏、菜单、文件对话框和文件读写流等编写简易记事本程序。内容介绍17.1任务预览17.2JToolBar工具栏17.3菜单17.4JPopupMenu弹出菜单17.5简易记事本17.6本章小结17.7实训17:简易记事本17.1任务预览本章实训程序运行结果:
17.2JToolBar工具栏工具栏属于容器,一般安置在边框布局的窗框上部。程序运行后用鼠标把工具栏拖到左边、右边、下部或中部。工具栏类JToolBar的构造方法有4个:(1)JToolBar():构造一个工具栏,默认为HORIZONTAL水平方向。(2)JToolBar(intorientation):构造指定方向的工具栏。(3)JToolBar(Stringname):构造指定名称的工具栏。名称用作浮动式工具栏的标题。(4)JToolBar(Stringname,intorientation)JToolBar最常用方法:继承Container类的add(Componentcomp)方法,添加按钮等组件到工具栏。【例17-1】编程,在窗框的上部放工具栏,上面放3个带图标的按钮。窗框中部放置带滚动窗格的文本区。classFrame1extendsJFrame{JToolBartoolBar=newJToolBar();ImageIconiconCut=newImageIcon("cut.gif");ImageIconiconCopy=…("copy.gif");ImageIconiconPaste=…("paste.gif");JButtonbuttonCut=newJButton("剪切",iconCut);JButtonbuttonCopy=…("复制",iconCopy);JButtonbuttonPaste=…("粘贴",iconPaste);JTextAreatextArea=newJTextArea();JScrollPanescrollPane=newJScrollPane(textArea);
续例17-1 publicFrame1(){ this.setTitle("带工具栏的窗框"); this.setBounds(100,200,240,220); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); initialize();this.setVisible(true); } privatevoidinitialize(){ toolBar.add(buttonCut);… this.add(toolBar,BorderLayout.NORTH); this.add(scrollPane,BorderLayout.CENTER); }}publicclassExample1{ publicstaticvoidmain(String[]args){ newFrame1(); }}17.3菜单菜单有两大类:菜单栏和弹出菜单。菜单栏JMenuBar:也叫主菜单,由若干个菜单“按钮”排成一行构成。单击菜单“按钮”JMenu,则会出现一个下拉菜单(列表)下拉菜单由多个菜单项(菜单命令)JMenuItem组成。菜单和菜单项都可设置键盘助记符(Mnemonic),运行时可使用键盘组合键“Alt+助记符”激活或执行菜单。助记符带下划线显示。还可对菜单项设置快捷键(英文是Accelerator,故也叫“加速器”),例如“退出”菜单中的Ctrl+E。菜单栏、菜单和菜单项都是组件,每个组件都是类的对象。【例17-2】在例17-1程序基础上,增加菜单栏。classFrame2extendsFrame1{ JMenuBarmenuBar=newJMenuBar(); JMenumenuFile=newJMenu("文件(F)"); JMenumenuEdit=newJMenu("编辑"); JMenumenuHelp=newJMenu("帮助(H)"); JMenuItemmenuItemFileNew=newJMenuItem("新建"); JMenuItemmenuItemFileOpen=newJMenuItem("打开"); JMenuItemmenuItemFileSaveAs=newJMenuItem("另存为"); JMenuItemmenuItemFileExit=newJMenuItem("退出(X)"); JCheckBoxMenuItemcheckBoxMenuItemEditAutoWrap= newJCheckBoxMenuItem("自动换行"); JMenuItemmenuItemEditCut=newJMenuItem("剪切");
续例17-2 JMenuItemmenuItemEditCopy=newJMenuItem("复制"); JMenuItemmenuItemEditPaste=newJMenuItem("粘贴"); JMenuItemmenuItemHelpAbout=newJMenuItem("关于(A)"); publicFrame2(){ this.setTitle("带菜单栏的窗框"); initialize();this.setVisible(true); } privatevoidinitialize(){ menuFile.setMnemonic(KeyEvent.VK_F);//菜单助记符F键 menuHelp.setMnemonic(KeyEvent.VK_H); menuItemFileExit.setMnemonic(KeyEvent.VK_X); menuItemHelpAbout.setMnemonic(KeyEvent.VK_A); //设置“退出”菜单项加速器(即快捷键)Ctrl+E: menuItemFileExit.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_E,KeyEvent.CTRL_DOWN_MASK,true));续例17-2 menuFile.add(menuItemFileNew);//添加“文件”菜单项 menuFile.add(menuItemFileOpen); menuFile.add(menuItemFileSaveAs); menuFile.addSeparator();//添加菜单项分隔符 menuFile.add(menuItemFileExit); menuEdit.add(checkBoxMenuItemEditAutoWrap); menuEdit.addSeparator(); menuEdit.add(menuItemEditCut); menuEdit.add(menuItemEditCopy); menuEdit.add(menuItemEditPaste); menuHelp.add(menuItemHelpAbout); menuBar.add(menuFile);//添加菜单栏菜单 menuBar.add(menuEdit); menuBar.add(menuHelp); this.setJMenuBar(menuBar);//窗框设置菜单栏 //“退出”菜单项添加动作事件监听器: menuItemFileExit.addActionListener(newActionListener(){…System.exit(0);}});}}…17.3.1JMenuBar菜单栏菜单栏是由菜单组成的条状容器组件,上面可放多个菜单或菜单项。菜单栏类JMenuBar的常用方法:(1)JMenuBar():构造一个菜单栏。(2)JMenuadd(JMenuc):在菜单栏中添加菜单。(3)Componentadd(Componentcomp,intindex):这是从Container类继承而来的方法,功能是将组件(菜单或菜单项等)添加到菜单栏指定的位置。索引位置从0开始,如果是-1,则添加到最后位置。17.3.2JMenu菜单菜单也是个容器,在上面放置菜单项或其它菜单。菜单栏上的菜单,运行时被选中,将出现“下拉菜单”。JMenu继承JMenuItem,即菜单是特殊的菜单项。JMenu的常用方法:(1)JMenu(Strings):构造指定文本的菜单。(2)JMenuItemadd(JMenuItemmenuItem):添加菜单项。(3)JMenuIteminsert(JMenuItemmi,intpos):插入菜单项。(4)voidaddSeparator():在菜单中添加分隔符。分隔符是JSeparator类的组件,用于菜单或工具栏作分隔。(5)Componentadd(Componentc):添加组件到菜单。在菜单menuFile中添加分隔符,有两种方法:menuFile.addSeparator();menuFile.add(newJSeparator());续17.3.2(6)voidremove(JMenuItemitem)(7)voidremove(intpos)(8)voidsetMnemonic(intmnemonic):在菜单中设置键盘助记符。键盘助记符是键盘事件类KeyEvent的静态常量字段,有VK_0、VK_1、…、VK_9、VK_A、VK_B、…、VK_Z等,用于表示键盘上的按键。设置了键盘助记符的菜单,程序运行时按Alt加上对应的按键激活。设置了助记符的菜单,在菜单的文本中可放置助记符字符,例如“文件(F)”,程序运行时,助记符“F”加下划线显示。注意:KeyEvent常量字段中的VK表示“虚拟键”,这是与平台无关的一种按键表示法。虚拟键的作用是报告按下了键盘上的哪个键。17.3.3JMenuItem菜单项菜单项是菜单列表中的菜单命令。JMenuItem常用方法:(1)JMenuItem(Stringtext)(2)JMenuItem(Iconicon):构造带指定图标的菜单项。(3)JMenuItem(Stringtext,Iconicon)(4)JMenuItem(Stringtext,intmnemonic):构造带文本和助记符的菜单项。菜单项与菜单一样,可以指定键盘助记符。菜单项还可设置键盘快捷键,通常以“Ctrl+按键”形式执行。(5)voidsetAccelerator(KeyStrokekeyStroke):设置加速器(快捷键),运行时不必显示菜单的层次结构,能直接执行菜单项。参数是键击类KeyStroke,该类只能使用静态方法getKeyStroke产生对象。如: menuItemFileExit.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_E,KeyEvent.CTRL_DOWN_MASK,true));KeyStroke类的getKeyStroke方法有3个参数,第一个表示X键,第二个表示Ctrl键,第三个参数true表示按键释放的情况下执行。6)voidaddActionListener(ActionListenerllstener):添加动作事件监听器。17.4JPopupMenu弹出菜单弹出菜单(快捷菜单):也由多个菜单项组成。弹出菜单与组件密切相关,不同组件弹出菜单一般相同。弹出菜单必须编写鼠标事件代码。要执行菜单项操作,还有添加菜单项的动作事件监听器。【例17-3】在例17-2程序基础上,增加文本区的弹出菜单。classFrame3extendsFrame2{//继承例17-2的Frame2 JPopupMenupopupMenu=newJPopupMenu(); JMenuItempopupMenuItemCut=newJMenuItem("剪切"); JMenuItempopupMenuItemCopy=newJMenuItem("复制"); JMenuItempopupMenuItemPaste=newJMenuItem("粘贴");续例17-3 publicFrame3(){ this.setTitle("增加了弹出菜单"); initialize(); this.setVisible(true); } privatevoidinitialize(){ popupMenu.add(popupMenuItemCut); popupMenu.add(popupMenuItemCopy); popupMenu.add(popupMenuItemPaste); //文本区添加鼠标事件监听器: textArea.addMouseListener(newMouseAdapter(){ publicvoidmouseReleased(MouseEvente){ if(e.isPopupTrigger()){ popupMenu.show(textArea,e.getX(),e.getY()); } }});}}…JPopupMenu常用方法(1)JPopupMenu()(2)JMenuItemadd(JMenuItemmenuItem)(3)voidinsert(Componentcomponent,intindex)(4)voidaddSeparator()(5)voidremove(intpos):移除指定索引位置的组件。(6)voidshow(Componentinvoker,intx,inty):在组件调用者的坐标空间中显示弹出菜单。如: popupMenu.show(textArea,e.getX(),e.getY());其中e为鼠标事件对象,e.getX()、e.getY()方法返回鼠标事件的x、y坐标。注:无论下拉菜单还是弹出菜单,均允许出现多层(多级)菜单。17.5简易记事本【例17-4】在例17-3程序基础上,编写菜单项和工具栏按钮的动作事件处理代码,完成简易记事本的功能。
续例17-4importjavax.swing.*;importjava.awt.event.*;importjava.io.*;importjavax.swing.filechooser.FileNameExtensionFilter;classFrame4extendsFrame3{//继承例17-3的Frame3 JFileChooserfileChooser=newJFileChooser(); FileNameExtensionFilterfileFilter=//文件扩展名过滤器 newFileNameExtensionFilter("文本文件","txt"); Filefile;
publicFrame4(){ this.setTitle("简易记事本"); this.setBounds(100,200,350,300); initialize(); this.setVisible(true); } privatevoidinitialize(){ //工具栏按钮添加动作事件监听(处理)器: buttonCut.addActionListener(newActionHandler()); buttonCopy.addActionListener(newActionHandler()); buttonPaste.addActionListener(newActionHandler()); //菜单项添加动作事件监听(处理)器: menuItemFileNew.addActionListener(newActionHandler()); menuItemFileOpen.addActionListener(…); … //弹出菜单项添加动作事件监听(处理)器: popupMenuItemCut.addActionListener(newActionHandler()); popupMenuItemCopy.addActionListener(…); popupMenuItemPaste.addActionListener(…); fileChooser.setFileFilter(fileFilter);//文件对话框扩展名过滤 }续例17-4 //菜单项和按钮的动作事件监听处理类(内部类): classActionHandlerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(e.getSource()==buttonCut ||e.getSource()==menuItemEditCut ||e.getSource()==popupMenuItemCut){ textArea.cut(); }elseif(e.getSource()==buttonCopy||…){ textArea.copy(); } … elseif(e.getSource()==menuItemFileNew){ newFile();//调用新建文件方法 }elseif(e.getSource()==menuItemFileOpen){ openFile();//调用打开文件方法 }elseif(e.getSource()==menuItemFileSaveAs){ saveAsFile(); //调用保存文件方法 }续例17-4 elseif(e.getSource()==checkBoxMenuItemEditAutoWrap){ if(checkBoxMenuItemEditAutoWrap.isSelected()){ textArea.setLineWrap(true);//设置文本区自动换行 }else{textArea.setLineWrap(false);}//取消文本区自动换行 }elseif(e.getSource()==menuItemHelpAbout){ JOptionPane.showMessageDialog(null,“程序设计…");}}} voidnewFile(){//新建文件方法 if(!textArea.getText().equals("")){ saveFile(); //调用保存文件方法 } textArea.setText(null);//清空文本区 file=null; this.setTitle("简易记事本"); }续例17-4 voidopenFile(){//打开文件方法 if(!textArea.getText().equals("")){ saveFile(); //调用保存文件方法 } intreturnVal=fileChooser.showOpenDialog(this); if(returnVal==JFileChooser.APPROVE_OPTION){ file=fileChooser.getSelectedFile(); try{ FileReaderfileReader=newFileReader(file); textArea.read(fileReader,null); this.setTitle(file.getName()+"—简易记事本"); fileReader.close();//关闭流 } catch(IOExceptione){ JOptionPane.showMessageDialog(this,"异常:“…); } }}续例17-4 voidsaveFile(){ //保存文件方法 if(file!=null&&file.exists()){//若文件已打开(存在) try{ FileWriterfileWriter=newFileWriter(file); textArea.write(fileWriter); fileWriter.close();//关闭流 } catch(IOExceptione){ JOptionPane.showMessageDialog(this,"异常:“…); } } else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园应急预案解读
- 食品安全伴我行
- 认识销售课件教学课件
- 假如课件教学课件
- 高三化学一轮复习 第一章 离子反应 离子方程式 课件
- 稻田餐厅课件教学课件
- 3.1.1铁及铁的氧化物 课件 高一上学期化学人教版(2019)必修第一册
- 2.2化学平衡 课件高二上学期化学人教版(2019)选择性必修1
- 成人夏季食品安全教育
- 企业宿舍管理培训
- (必会)企业人力资源管理师(三级)近年考试真题题库(含答案解析)
- 2024年职业院校技能大赛数字化装备制造技术赛项理论题库(备赛500题)
- 《中外历史纲要》(下)
- 电话销售人员聘用合同
- 2024年山西电力职业技术学院单招职业适应性测试题库汇编
- 2024年入团积极分子考试题库(含答案)
- 工业机器人技术分析报告
- 2024-企业与高校科研合作协议完整版
- 医院水电管理制度
- 25题机器视觉算法岗位常见面试问题含HR问题考察点及参考回答
- MOOC 流行歌曲演唱-武汉理工大学 中国大学慕课答案
评论
0/150
提交评论