第一节 第二节 第三节 第四节 第五节 第六节 第七节 第八节 第九节 第十节 第十一节
第十一节    菜单和工具栏
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类的构造函数及常用方法

构造函数

说明

public MenuItem()

创建一个菜单项

public MenuItem(String label)

创建一个带有标签的菜单项

常用方法

说明

public String getLabel()

获取菜单项的标签

public void setLabel(String label)

设置菜单项的标签

public boolean isEnabled()

判断菜单项是否处于活跃状态

public void setEnabled(boolean b)

设定菜单项能否被选择

表13.8 MenuBar类的构造函数及常用方法

构造函数

说明

public MenuBar()

创建一个菜单栏对象

常用方法

说明

public Menu add(Menu m)

向菜单栏中添加指定菜单

public void Remove(int index)

删除菜单栏中指定位置的菜单项

public void Remove(MenuComponent m)

删除菜单栏中指定的菜单组件


表13.9 Menu类的构造函数及常用方法

构造函数

说明

public Menu()

创建一个菜单对象

public Menu(String label)

创建一个带有标签的菜单对象

常用方法

说明

public MenuItem add(MenuItem mi)

向菜单中添加菜单项

public void add(String label)

向菜单中添加菜单项

public void addSeperator()

向菜单中添加分割线

public MenuItem getItem(int index)

获取指定位置的菜单项

int getItemCount()

获取菜单中工作间项的个数

public void insert(String label,int index)

在菜单指定位置插入菜单项

public void remove(int index)

删除指定位置的菜单项

public void remove(MenuComponent item)

删除菜单中指定的菜单项

public void removeAll()

删除所有菜单项


【例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 快捷菜单示例