第一节 | 第二节 | 第三节 | 第四节 | 第五节 | 第六节 | 第七节 | 第八节 | 第九节 | 第十节 | 第十一节 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 菜单和快捷菜单 菜单(Menu)是GUI的重要组成部分,用户可以利用菜单完成一些直接或间接操作而不必添加额外GUI组件。菜单只能应用在框架上。图10.14列出了菜单及其相关的类在java.awt软件包中的层次关系。 ![]() 图13.7 菜单及其相关类的层次关系 图13.8显示的是Windows记事本的菜单。 ![]() 图13.8 Windows记事本的菜单 MenuItem类用于创建菜单项。一个菜单项就是包含在菜单中的一个字符串,当选中它时将会执行一个动作。菜单项既可以是一个命令,从而用于执行某一个方法,也可以是另一个菜单(称为子菜单)。MenuItem类的构造函数及常用方法见表10.10。 MenuBar类用于创建菜单栏,菜单栏是菜单的容器。MenuBar类的构造函数及常用方法见表10.11。 Menu类用于创建菜单,菜单中包含若干菜单项,并将其添加到菜单栏上。当使用鼠标点击一个菜单时,就将展开该菜单,并显示一列菜单项。Menu类的构造函数及常用方法见表10.12。 CheckboxMenuItem类用于创建复选框菜单。复选框菜单项就是带有选择标记的菜单项。当选中复选框菜单项时,在该菜单项左边出现一个选择标记。如果再次选中该项,则该选项左边的选择标记就会消失。 表13.7 MenuItem类的构造函数及常用方法
表13.8 MenuBar类的构造函数及常用方法
表13.9 Menu类的构造函数及常用方法
【例13.7】演示在应用程序中创建菜单的方法。 //Fig. 10.16: MenuDemo.java //Incorporating menus into a Frame-based application. import java.awt.*; public class MenuDemo extends Frame{ private TextArea t; public MenuDemo() { super("菜单示例"); t=new TextArea(); add("Center",t); //create Menu Bar MenuBar bar=new MenuBar(); //create font Menu Menu fontMenu=new Menu("字体"); //create three MenuItems MenuItem mi1=new MenuItem("宋体"); MenuItem mi2=new MenuItem("黑体"); MenuItem mi3=new MenuItem("隶书"); //add MenuItems to Menu fontMenu.add(mi1); fontMenu.add(mi2); fontMenu.add(mi3); //add Menu to Menu Bar bar.add(fontMenu); //set the Menu Bar for the frame setMenuBar(bar); resize(300,200); setVisible(true); } public static void main(String[] args) { new MenuDemo(); } } 使用Java解释器运行后,程序结果如图13.9所示。 ![]() 图13.9 Menu示例 程序中首先创建菜单栏对象: MenuBar bar = new MenuBar(); 然后创建Menu对象: Menu fontMenu=new Menu("字体"); 最后,创建三个MenuItem对象: MenuItem mi1=new MenuItem("宋体"); MenuItem mi2=new MenuItem("黑体"); MenuItem mi3=new MenuItem("隶书"); 下列语句将MenuItem对象添加到Menu中: fontMenu.add(mi1); fontMenu.add(mi2); fontMenu.add(mi3); 然后把fontMenu添加到菜单栏上: bar.add(fontMenu); 最后不要忘记通过Frame类的setMenuBar方法将菜单栏添加到框架上。如果忘记将菜单栏添加到框架上,则该菜单栏在框架上就显示不出来。下列语句完成此功能: setMenuBar(bar); 快捷菜单也称弹出式菜单,附在某个组件或容器上,当在附有快捷菜单的组件上单击鼠标右键时,即显示快捷菜单。 PopupMenu类用于创建快捷菜单。其构造函数只有一个: public PopupMenu() 快捷菜单的结构与菜单相同,也由若干个菜单项组成,需要使用组件的add方法将快捷菜单附着于组件上。 希望单击鼠标右键时显示快捷菜单,需要所附有快捷菜单的组件注册给MouseListener,并在mouseReleased()方法中调出快捷菜单(关于这部分知识请参阅后面的Java事件处理)。 【例13.8】仿上例,为多行文本框添加快捷菜单。程序运行如图13.9所示。 //Fig. 10.17: PopupMenuDemo.java //demonstrating a popup menu import java.awt.*; import java.awt.event.*; public class PopupMenuDemo extends Frame implements MouseListener{ TextArea t; PopupMenu pm; public PopupMenuDemo(){ super("快捷菜单示例"); t=new TextArea(); add("Center",t); //create Popup Menu pm=new PopupMenu(); //create three menuitems MenuItem mi1=new MenuItem("宋体"); MenuItem mi2=new MenuItem("黑体"); MenuItem mi3=new MenuItem("隶书"); //add menu items to menu pm.add(mi1); pm.add(mi2); pm.add(mi3); //add popup menu to text area t.add(pm); //add MouseListener t.addMouseListener(this); setSize(300,200); setVisible(true); } //display popupmenu with right_click textarea public void mouseReleased(MouseEvent e){ if(e.isPopupTrigger()){ pm.show((Component)e.getSource(),e.getX(),e.getY()); } } public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public static void main(String[] args){ new PopupMenuDemo(); } } ![]() 图13.10 快捷菜单示例 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||