《JavaGUI菜单和工具栏.ppt》由会员分享,可在线阅读,更多相关《JavaGUI菜单和工具栏.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十九第十九Java GUI编程高级编程高级本讲主要内容:本讲主要内容:l l给给GUI应用程序添加菜单应用程序添加菜单l l“Java Editor”项目的界面更新项目的界面更新l l为组件定制弹出式菜单为组件定制弹出式菜单l l给给GUI应用程序添加工具栏应用程序添加工具栏一、一、给GUI应用程序添加菜单 菜单概述菜单概述 n n菜单的作用:给应用程序设置操作菜单。菜单的作用:给应用程序设置操作菜单。n n菜单组成菜单组成 JMenuItem-JMenuItem-菜单项,直接指向一个具体的操作菜单项,直接指向一个具体的操作 JMenu-JMenu-菜单,其中可加入菜单项(菜单,其中可加入菜
2、单项(JMenuItemJMenuItem)和菜)和菜单单(Jmenu)(Jmenu)JMenuBar-JMenuBar-菜单栏,在其中可以加入菜单(菜单栏,在其中可以加入菜单(JMenuJMenu)菜单的创建和组织菜单的创建和组织n n菜单的创建 JMenuJMenu、JMenuBarJMenuBar和和JMenuItemJMenuItem类的构造方法见表:类的构造方法见表:如创建一个如创建一个“File”File”菜单:菜单:JMenu file=new JMenu file=new JMenu(File);JMenu(File);菜单的创建和组织菜单的创建和组织(续续)n n菜单的组织菜
3、单的组织 菜单栏可象别的组件一样添加到应用程序窗口。菜单栏可象别的组件一样添加到应用程序窗口。JFrameJFrame窗口加入菜单栏的方法:窗口加入菜单栏的方法:public void setJMenuBar(JMenuBar menubar)public void setJMenuBar(JMenuBar menubar)JMenuBarJMenuBar加入加入JMenuJMenu的方法:的方法:public JMenu add(JMenu c)public JMenu add(JMenu c)JMenuJMenu中加入中加入JMenuJMenu、JMenuItemJMenuItem、分隔线
4、的方法:、分隔线的方法:public JMenuItem add(JMenuItem menuItem)public JMenuItem add(JMenuItem menuItem)public void addSeparator()public void addSeparator()说明:因说明:因JMenuJMenu是是JMenuItemJMenuItem的子类,故的子类,故add(JMenuItem add(JMenuItem menuItem)menuItem)也可加入也可加入JMenuJMenu菜单。菜单。如:如:file.add(new JMenuItem(New);file.a
5、dd(new JMenuItem(New);file.addSeparator();file.addSeparator();菜单的创建和组织菜单的创建和组织(续续)n n快捷键设置快捷键设置 JMenuJMenu的快捷键通常是的快捷键通常是Alt+Alt+字符键的组合,可用字符键的组合,可用setMnemonicsetMnemonic方法设置:方法设置:JMenuJMenu对象对象对象对象.setMnemonic(int mnemonic);.setMnemonic(int mnemonic);JMenuItemJMenuItem的快捷键可以是的快捷键可以是Ctrl+Ctrl+字符键或字符键或
6、Alt+Alt+字符字符键的组合,可用键的组合,可用setAcceleratorsetAccelerator方法设置:方法设置:JMenuItemJMenuItem对象对象对象对象.setAccelerator(KeyStroke.getKeyStroke.setAccelerator(KeyStroke.getKeyStroke(参数参数参数参数1,1,参数参数参数参数2);2);参数参数1 1指向快捷键字符。参数指向快捷键字符。参数2 2指向控制字符,通常是指向控制字符,通常是KeyEvent.CTRL_MASKKeyEvent.CTRL_MASK(CtrlCtrl),),KeyEvent
7、.ALT_MASKKeyEvent.ALT_MASK(AltAlt)。)。如:如:open.setAccelerator(KeyStroke.getKeyStroke(O,open.setAccelerator(KeyStroke.getKeyStroke(O,KeyEvent.CTRL_MASK);KeyEvent.CTRL_MASK);可给可给“open”open”菜单项设置快捷键菜单项设置快捷键“Ctrl+O”Ctrl+O”。菜单项的事件处理菜单项的事件处理 n n当用户选定一个菜单项时,该菜单项将发生当用户选定一个菜单项时,该菜单项将发生ActionEventActionEvent事件
8、。关于事件。关于ActionEventActionEvent事件的处理,重申事件的处理,重申三要点:三要点:(1)(1)安装侦听器安装侦听器 (implements ActionListener)(implements ActionListener)(2)(2)通过通过addActionListeneraddActionListener方法设置侦听方法设置侦听 (3)(3)重写方法重写方法actionPerformedactionPerformed实现事件处理实现事件处理 二、二、“Java Editor”项目的界面更新 界面设计界面设计 n n新的界面将按钮的功能集合到菜单栏中。新的界面将按
9、钮的功能集合到菜单栏中。n n界面元素界面元素 菜单,集合了所有的功能。菜单,集合了所有的功能。嵌入滚动面板的多行文本框,用于文本显示和编辑。嵌入滚动面板的多行文本框,用于文本显示和编辑。界面设计界面设计(续续)“Edit”Edit”对文本区域操作,可以实现:复制、剪切、粘对文本区域操作,可以实现:复制、剪切、粘贴以及全选。贴以及全选。“Help”Help”“About”“About”将弹出将弹出AboutAbout窗口。参考界面如图所示。窗口。参考界面如图所示。程序实现:程序实现:程序实现:程序实现:import java.awt.*;import java.awt.*;import jav
10、a.awt.event.*;import java.awt.event.*;import javax.swing.*;import javax.swing.*;class NewEditor extends JFrame class NewEditor extends JFrame JMenuBar mnb;/JMenuBar mnb;/菜单栏菜单栏菜单栏菜单栏 JMenu file,edit,config,help;/JMenu file,edit,config,help;/各菜单各菜单各菜单各菜单 JMenuItem New,open,save,exit;/File JMenuItem N
11、ew,open,save,exit;/File下的菜单项下的菜单项下的菜单项下的菜单项 JMenuItem copy,cut,paste,selectall;/Edit JMenuItem copy,cut,paste,selectall;/Edit下的菜单项下的菜单项下的菜单项下的菜单项 JMenuItem fc,bc,dc;/Config JMenuItem fc,bc,dc;/Config下的菜单项下的菜单项下的菜单项下的菜单项 JMenuItem about;/Help JMenuItem about;/Help下的菜单项下的菜单项下的菜单项下的菜单项 JTextArea t;JTex
12、tArea t;NewEditor()NewEditor()super(Java Editor);super(Java Editor);setDefaultCloseOperation(3);setDefaultCloseOperation(3);editInit();editInit();this.add(new JScrollPane(t);this.add(new JScrollPane(t);this.setJMenuBar(mnb);this.setJMenuBar(mnb);this.setBounds(200,200,600,400);this.setBounds(200,200
13、,600,400);this.setVisible(true);this.setVisible(true);private void editInit()private void editInit()t=new JTextArea();t=new JTextArea();t.setLineWrap(true);t.setLineWrap(true);file=new JMenu(File);file=new JMenu(File);file.setMnemonic(F);file.setMnemonic(F);New=new JMenuItem(New);New=new JMenuItem(N
14、ew);open=new JMenuItem(Open);open=new JMenuItem(Open);save=new JMenuItem(Save);save=new JMenuItem(Save);exit=new JMenuItem(Exit);exit=new JMenuItem(Exit);file.add(New);file.add(open);file.add(New);file.add(open);file.addSeparator();file.addSeparator();file.add(save);file.add(save);file.addSeparator(
15、);file.addSeparator();file.add(exit);file.add(exit);edit=new JMenu(Edit);edit=new JMenu(Edit);edit.setMnemonic(E);edit.setMnemonic(E);copy=new JMenuItem(Copy);copy=new JMenuItem(Copy);paste=new JMenuItem(Paste);paste=new JMenuItem(Paste);cut=new JMenuItem(Cut);cut=new JMenuItem(Cut);edit.add(cut);ed
16、it.add(copy);edit.add(paste);edit.add(cut);edit.add(copy);edit.add(paste);edit.addSeparator();edit.addSeparator();edit.add(selectall);edit.add(selectall);config=new JMenu(Config);config=new JMenu(Config);config.setMnemonic(C);config.setMnemonic(C);bc=new JMenuItem(Back Color);bc=new JMenuItem(Back C
17、olor);fc=new JMenuItem(Fore Color);fc=new JMenuItem(Fore Color);dc=new JMenuItem(Default Color);dc=new JMenuItem(Default Color);config.add(fc);config.add(bc);config.add(fc);config.add(bc);config.addSeparator();config.addSeparator();config.add(dc);config.add(dc);help=new JMenu(Help);help=new JMenu(He
18、lp);help.setMnemonic(H);help.setMnemonic(H);about=new JMenuItem(About);about=new JMenuItem(About);help.add(about);help.add(about);mnb=new JMenuBar();mnb=new JMenuBar();mnb.add(file);mnb.add(edit);mnb.add(file);mnb.add(edit);mnb.add(config);mnb.add(help);mnb.add(config);mnb.add(help);public static vo
19、id main(String args)public static void main(String args)new NewEditor();new NewEditor();三、三、为组件定制弹出式菜单 问题的提出 n n为为“Java Editor”“Java Editor”程序的文本编辑区域定制如图所示的的弹程序的文本编辑区域定制如图所示的的弹出式菜单。出式菜单。n n菜单中有五个菜单项组成,分别指示了不同的字体风格,菜单中有五个菜单项组成,分别指示了不同的字体风格,可通过菜单项的选择实现文本区域中文本字体和字号的可通过菜单项的选择实现文本区域中文本字体和字号的改变。改变。用JPopup
20、Menu类建立弹出式菜单 n n建立弹出式菜单 预先定义一个继承预先定义一个继承JPopupMenuJPopupMenu类的子类,弹出式菜单类的子类,弹出式菜单施加给的对象应由构造方法中的参数接收。本例应是负施加给的对象应由构造方法中的参数接收。本例应是负责文本编辑的多行文本框。责文本编辑的多行文本框。JPopupMenuJPopupMenu类的类的addadd方法允许向菜单中加入菜单项。方法允许向菜单中加入菜单项。弹出式菜单项的激活事件是弹出式菜单项的激活事件是ActionEventActionEvent,可依照多按钮的,可依照多按钮的事件处理方法进行事件处理。事件处理方法进行事件处理。n
21、n字体风格弹出式菜单的实现:字体风格弹出式菜单的实现:import java.awt.*;import java.awt.*;import java.awt.event.*;import java.awt.event.*;import javax.swing.*;import javax.swing.*;import javax.swing.border.BevelBorder;import javax.swing.border.BevelBorder;class FontPopup extends JPopupMenu implements ActionListenerclass FontP
22、opup extends JPopupMenu implements ActionListener String item;String item;Font font;Font font;JMenuItem mt;JMenuItem mt;JTextArea t;JTextArea t;FontPopup(JTextArea t)FontPopup(JTextArea t)this.t=t;this.t=t;this.setBorder(new BevelBorder(BevelBorder.RAISED);this.setBorder(new BevelBorder(BevelBorder.
23、RAISED);/设置立体边框设置立体边框 item=new String item=new String标准仿宋标准仿宋,粗放行楷粗放行楷,规矩新魏规矩新魏,精致宋体精致宋体,灵感隶书灵感隶书;font=new Font new Font(font=new Font new Font(仿宋仿宋,0,18),new Font(,0,18),new Font(华文行楷华文行楷,0,30),0,30),new Font(new Font(华文新魏华文新魏,0,22),new Font(,0,22),new Font(宋体宋体,0,14),0,14),new Font(new Font(隶书隶书,0
24、,20);,0,20);for(int i=0;iitem.length;i+)for(int i=0;iitem.length;i+)mt=new JMenuItem(itemi);mt=new JMenuItem(itemi);mt.setFont(new Font(mt.setFont(new Font(仿宋仿宋,0,14);,0,14);this.add(mt);this.add(mt);mt.addActionListener(this);mt.addActionListener(this);public void actionPerformed(ActionEvent e)publ
25、ic void actionPerformed(ActionEvent e)String s=e.getActionCommand();String s=e.getActionCommand();int i;int i;for(i=0;iitem.length;i+)for(i=0;iitem.length;i+)if(s.equals(itemi)break;if(s.equals(itemi)break;t.setFont(fonti);t.setFont(fonti);用JPopupMenu类建立弹出式菜单 n n为多行文本框定制弹出式菜单让以上的弹出式菜单对文本框真实可用,就需要对文让
26、以上的弹出式菜单对文本框真实可用,就需要对文本框设置事件侦听。可通过本框设置事件侦听。可通过MouseEventMouseEvent的的getButton()getButton()方法方法判断用户按下了哪个鼠标键:判断用户按下了哪个鼠标键:MouseEvent.BUTTON1MouseEvent.BUTTON1左键左键 MouseEvent.BUTTON2MouseEvent.BUTTON2中间键中间键 MouseEvent.BUTTON3MouseEvent.BUTTON3右键右键 n n多行文本框带弹出式菜单的实现:import java.awt.event.*;import javax.
27、swing.*;import java.awt.event.*;import javax.swing.*;class JTextAreaWithMenu extends JTextArea implements MouseListener class JTextAreaWithMenu extends JTextArea implements MouseListener FontPopup fp;FontPopup fp;JTextAreaWithMenu(int r,int c)JTextAreaWithMenu(int r,int c)super(r,c);super(r,c);fp=ne
28、w FontPopup(this);fp=new FontPopup(this);this.addMouseListener(this);this.addMouseListener(this);this.add(fp);this.add(fp);public void mousePressed(MouseEvent e)public void mousePressed(MouseEvent e)if(e.getButton()=e.BUTTON3)fp.show(this,e.getX(),e.getY();if(e.getButton()=e.BUTTON3)fp.show(this,e.g
29、etX(),e.getY();public void mouseClicked(MouseEvent e)public void mouseClicked(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseReleased(MouseEvent e)public void mouseRel
30、eased(MouseEvent e)四、四、给GUI应用程序添加工具栏 问题提出 n n继续对“Java Editor”项目进行更新,再为界面添加如图所示的工具栏。工具栏上流式顺序排放了七个工具按钮,作用分别是:新建文件、打开文件、保存文件、复制、剪切、粘贴、帮助。工具栏界面设计n n步骤创建工具栏对象 将组件加入到工具栏 将工具栏加入到应用程序窗口 工具栏界面设计(续)n n创建工具栏对象 工具栏用工具栏用JToolBarJToolBar类及其子类创建,它是一个容器组件,类及其子类创建,它是一个容器组件,在工具栏组件中可以容放其他组件。在工具栏组件中可以容放其他组件。JToolBarJTo
31、olBar的构造方法:的构造方法:的构造方法:的构造方法:public JToolBar()public JToolBar():默认方向为水平(默认方向为水平(HORIZONTAL HORIZONTAL)。)。public JToolBar(int orientation)public JToolBar(int orientation):指定方向,参数可选指定方向,参数可选 HORIZONTAL HORIZONTAL 或或 VERTICAL VERTICAL,后者为竖式工具栏。,后者为竖式工具栏。public JToolBar(String name)public JToolBar(Strin
32、g name):指定标题,标题浮动时可见。指定标题,标题浮动时可见。默认的方向为默认的方向为 HORIZONTAL HORIZONTAL。工具栏界面设计(续)n n将组件加入到工具栏 工具栏设置布局:工具栏设置布局:setLayoutsetLayout方法,默认方法,默认FlowLayoutFlowLayout流式流式排放。排放。工具栏添加组件:工具栏添加组件:addadd方法向。也可通过方法向。也可通过“addSeparator()”addSeparator()”方法在工具栏中加入分隔,以对工方法在工具栏中加入分隔,以对工具按钮按功能分组。具按钮按功能分组。n n将工具栏加入到应用程序窗口
33、JFrameJFrame类的类的addadd方法,可将工具栏加入进应用程序窗口,方法,可将工具栏加入进应用程序窗口,同时确定停放位置。同时确定停放位置。如:如:this.add(toolBar,North);/this.add(toolBar,North);/加入工具栏并停靠在上边加入工具栏并停靠在上边 import java.awt.*;import java.awt.event.*;import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import java.io.*;import j
34、avax.swing.*;class EditorToolBar extends JToolBar class EditorToolBar extends JToolBar EditorToolBar(JTextArea t)EditorToolBar(JTextArea t)super(Toolbar for Java Editor);super(Toolbar for Java Editor);String imgFile=new.jpg,open.jpg,save.jpg,String imgFile=new.jpg,open.jpg,save.jpg,copy.jpg,cut.jpg,
35、paste.jpg,help.jpg;copy.jpg,cut.jpg,paste.jpg,help.jpg;ImageIcon toolImage=new ImageIconimgFile.length;ImageIcon toolImage=new ImageIconimgFile.length;JButton tb=new JButtonimgFile.length;JButton tb=new JButtonimgFile.length;for(int i=0;i imgFile.length;i+)for(int i=0;i imgFile.length;i+)toolImagei=new ImageIcon(graphics+imgFilei);toolImagei=new ImageIcon(graphics+imgFilei);tbi=new JButton(toolImagei);tbi=new JButton(toolImagei);if(i=3|i=6)this.addSeparator();if(i=3|i=6)this.addSeparator();this.add(tbi);this.add(tbi);练习n n练习:对以上工具栏上的按钮进行事件处理,并将工具栏加入到“Java Editor”项目中。