Java知多少(89)列表和组合框

有两种类型的菜单:下拉式菜单和弹出式菜单。本章只讨论下拉式菜单编程方法。菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的。菜单与JComboBox的相同之处是每次只可选择一个项目。

在下拉式菜单或弹出式菜单中选择一个选项就产生一个ActionEvent事件。该事件被发送给那个选项的监视器,事件的意义由监视器解释。

菜单条、菜单和菜单项

下拉式菜单通过出现在菜单条上的名字可视化表示,菜单条(JMenuBar)通常出现在JFrame的顶部,一个菜单条显示多个下拉式菜单的名字。可以用两种方式来激活下拉式菜单。一种是按下鼠标的按钮,并保持按下状态,移动鼠标,直至释放鼠标完成选择,高亮度显示的菜单项即为所选择的。另一种方式是当光标位于菜单条中的菜单名上时,点击鼠标,在这种情况下,菜单会展开,且高亮度显示菜单项。

一个菜单条可以放多个菜单(JMenu),每个菜单又可以有许多菜单项(JMenuItem)。例如,Eclipse环境的菜单条有File、Edit、Source、Refactor等菜单,每个菜单又有许多菜单项。例如,File菜单有New、Open File、Close 、Close All等菜单项。

向窗口增设菜单的方法是:先创建一个菜单条对象,然后再创建若干菜单对象,把这些菜单对象放在菜单条里,再按要求为每个菜单对象添加菜单项。
菜单中的菜单项也可以是一个完整的菜单。由于菜单项又可以是另一个完整菜单,因此可以构造一个层次状菜单结构。

1.菜单条
类JMenuBar的实例就是菜单条。例如,以下代码创建菜单条对象menubar:
    JMenuBar menubar = new JMenuBar();
在窗口中增设菜单条,必须使用JFrame类中的setJMenuBar()方法。例如,代码:
    setJMenuBar(menubar);

类JMenuBar的常用方法有:

  1. add(JMenu m):将菜单m加入到菜单条中。
  2. countJMenus():获得菜单条中菜单条数。
  3. getJMenu(int p):取得菜单条中的菜单。
  4. remove(JMenu m):删除菜单条中的菜单m。

2. 菜单
由类JMenu创建的对象就是菜单。类JMenu的常用方法如下:

  1. JMenu():建立一个空标题的菜单。
  2. JMenu(String s):建立一个标题为s的菜单。
  3. add(JMenuItem item):向菜单增加由参数item指定的菜单选项。
  4. add(JMenu menu):向菜单增加由参数menu指定的菜单。实现在菜单嵌入子菜单。
  5. addSeparator():在菜单选项之间画一条分隔线。
  6. getItem(int n):得到指定索引处的菜单项。
  7. getItemCount():得到菜单项数目。
  8. insert(JMenuItem item,int n):在菜单的位置n插入菜单项item.
  9. remove(int n):删除菜单位置n的菜单项
  10. removeAll():删除菜单的所有菜单项。

3.菜单项
类JMenuItem 的实例就是菜单项。类JMenuItem的常用方法如下:

  1. JMenuItem():构造无标题的菜单项。
  2. JMenuItem(String s):构造有标题的菜单项。
  3. setEnabled(boolean b):设置当前单项是否可被选择。
  4. isEnabled():返回当前菜单项是否可被用户选择。
  5. getLabel():得到菜单项的名称。
  6. setLabel():设置菜单选项的名称。
  7. addActionListener(ActionListener e):为菜单项设置监视器。监视器接受点击某个菜单的动作事件。

4. 处理菜单事件
菜单的事件源是用鼠标点击某个菜单项。处理该事件的接口是ActionListener,要实现的接口方法是actionPerformed(ActionEvent e),获得事件源的方法getSource().

【例 11-15】小应用程序示意窗口有菜单条的实现方法。设有一个按钮,当按钮处于打开窗口状态时,单击按钮将打开一个窗口,窗口设有一个菜单条,有两个菜单,每个菜单又各有三个菜单项。当一个菜单项被选中时,菜单项监视方法在文本框中显示相应菜单项被选中字样。

 1 import java.applet.*
 2 import javax.swing.*;
 3 import java.awt.*;
 4 import java.awt.event.*;
 5 class MenuWindow extends JFrame implements ActionListener{
 6     public static JtextField text;
 7     private void addItem(JMenu Menu,String menuName,ActionListener listener){
 8         JMenuItem anItem = new JMenuItem(menuName);
 9         anItem.setActionCommand(menuName);
10         anItem.addActionListener(listener);
11         Menu.add(anItem);
12     }
13     public MenuWindow(String s,int w,int h){
14         setTitle(s);
15         Container con = this.getContentPane();
16         con.setLayout(new BorderLayout());
17         this.setLocation(100,100);
18         this.setSize(w,h);
19         JMenu menu1 = new JMenu("体育");
20         addItem(menu1," 跑步",this);
21         addItem(menu1," 跳绳",this);
22         addItem(menu1,"打球",this);
23         JMenu menu2 = JMenu("娱乐");
24         addItem(menu2,"唱歌",this);
25         addItem(menu2,"跳舞",this);
26         addItem(menu2,"游戏",this);
27         JMenuBar menubar = new JMenuBar();
28         text = new JTextField();
29         menubar.add(menu1);
30         menubar.add(menu2);
31         setJMenuBar(MenuBar);
32         con.add(text,BorderLayout.NORTH);
33     }
34     public void actionPerformed(ActionEvent e){
35         text.setText(e.getActionCommand()+"菜单项被选中!");
36     }
37 }
38 public class Example6_5 extends Applet implements ActionListener{
39     MenuWindow window;
40     JButton button;
41     boolean bflg;
42     public void init(){
43         button = new JButton("打开我的体育娱乐之窗");bflg =true;
44         window = new MenuWindow("体育娱乐之窗",100,100);
45         button.addActionListener(this);
46         add(button);
47     }
48     public void actionPerformed(ActionEvent e){
49         if(e.getSource()==button){
50             if(bflg){
51                 window.setVisible(true);
52                 bflg = false;
53                 button.setLabel("关闭我的体育娱乐之窗");
54             }
55             else{
56                window.setVisible(false);
57                bflg = true;
58                button.setLabel("打开我的体育娱乐之窗");
59             }
60         }
61     }
62 }

5. 嵌入子菜单
创建了一个菜单,并创建多个菜单项,其中某个菜单项又是一个(含其他菜单项的)菜单,这就构成菜单嵌套。例如,将上述程序中的有关代码改成如下:
    Menu menu1,menu2,item4;
    MenuItem item3,item5,item6,item41,item42;
另插入以下代码创建item41和item42菜单项,并把它们加入到item4菜单中:
    item41= new MenuItem(“东方红”);
    item42 = new MenuItem(“牡丹”);
    item4.add(item41);
    item4.add(item42);
则点击item4菜单时,又会打开两个菜单项供选择。

6. 向菜单增加退出项
增设一个新的菜单项,对该菜单项加入监视,对应的监视方法中使用System.exit()方法,就能实现单击该菜单项时退出Java运行环境。例如,以下示意代码:

1 …
2 item7 = new MenuItem(“退出”);
3 item7.addActionListener(this);
4 …
5 public void actionPerformed(ActionEvent e){
6     if(e.getSource()==item7){
7         System.exit(0);
8     }
9 }

7.设置菜单项的快捷键

用MenuShortcut类为菜单项设置快捷键。构造方法是MenuShortcut(int key)。其中key可以取值KeyEvent.VK_A至KenEvent.VK_Z,也可以取 ‘a’到 ‘z’键码值。菜单项使用setShortcut(MenuShortcut k)方法来设置快捷键。例如,以下代码设置字母e为快捷键。

1 class Herwindow extends Frame implements ActionListener{
2     MenuBar menbar;
3     Menu menu;
4     MenuItem item;
5     MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_E);
6     …
7     item.setShortcut(shortcut);
8     …
9 }

选择框菜单项

菜单也可以包含具有持久的选择状态的选项,这种特殊的菜单可由JCheckBoxMenuItem类来定义。JCheckBoxMenuItem对象像选择框一样,能表示一个选项被选中与否,也可以作为一个菜单项加到下拉菜单中。点击JCheckBoxMenuItem菜单时,就会在它的左边出现打勾符号或清除打勾符号。例如,在例6.5程序的类MenuWindow中,将代码
    addItem(menu1,“跑步”,this);addItem(menu1,”跳绳”,this);
改写成以下代码,就将两个普通菜单项“跑步“和“跳绳”改成两个选择框菜单项:

1     JCheckBoxMenuItem item1 = new JCheckBoxMenuItem(“跑步”);
2     JCheckBoxMenuItem item2 = new JCheckBoxMenuItem(“跳绳”);
3     item1.setActionCommand(“跑步”);
4     item1.addActionListener(this);
5     menu1.add(item1);
6     item2.setActionCommand(“跳绳”);
7     item2.addActionListener(this);
8     menu1.add(item2);

系列文章:

Java知多少(上)

Java知多少(中)

Java知多少(78)Java向量(Vector)及其应用

Java知多少(79)哈希表及其应用

Java知多少(80)图形界面设计基础

Java知多少(81)框架窗口基础

Java知多少(82)标签、按钮和按钮事件简介

Java知多少(83)面板基础:JPanel和JScrollPane

Java知多少(84)图形界面之布局设计

Java知多少(85)文本框和文本区

Java知多少(86)文本框和文本区的输入输出

Java知多少(87)选择框和单选按钮

Java知多少(88)列表和组合框

时间: 2024-12-28 22:28:18

Java知多少(89)列表和组合框的相关文章

Java知多少(88)列表和组合框

列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文本选择项条目.列表事件的事件源有两种: 一是鼠标双击某个选项:双击选项是动作事件,与该事件相关的接口是ActionListener,注册监视器的方法是addActionListener(),接口方法是actionPerformed(ActionEvent e). 二是鼠标单击某个选项:单击选项是选项

Java知多少(87)选择框和单选按钮(转)

选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(JCheckBox)的选中与否开状是一个小方框,被选中则在框中打勾.当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称复选框.与选择框相关的接口是ItemListener,事件类是ItemEvent.JCheckBox类常用的构造方法有以下3个: JCheckBox():用空标题

Java知多少(87)选择框和单选按钮

选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(JCheckBox)的选中与否开状是一个小方框,被选中则在框中打勾.当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称复选框.与选择框相关的接口是ItemListener,事件类是ItemEvent. JCheckBox类常用的构造方法有以下3个: JCheckBox():用空标

Java知多少(86)文本框和文本区的输入输出

在GUI中,常用文本框和文本区实现数据的输入和输出.如果采用文本区输入,通常另设一个数据输入完成按钮.当数据输入结束时,点击这个按钮.事件处理程序利用getText()方法从文本区中读取字符串信息.对于采用文本框作为输入的情况,最后输入的回车符可以激发输入完成事件,通常不用另设按钮.事件处理程序可以利用单词分析器分析出一个个数,再利用字符串转换数值方法,获得输入的数值.对于输出,程序先将数值转换成字符串,然后通过setText()方法将数据输出到文本框或文本区. [例 11-9]小应用程序设置一

Java知多少(完结篇)

Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java开发环境的搭建 Java知多少(6)第一个程序示例 Java知多少(7)类与对象 Java知多少(8)类库及其组织结构 Java知多少(9) import及Java类的搜索路径 Java知多少(10)数据类型及变量 Java知多少(11)数据类型转换 Java知多少(12)运算符 Java知多少(1

Java知多少(110)数据库之插入记录

插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例如: insert into ksInfo(考号,姓名,成绩,地址,简历)value(‘200701’,’张大卫’534,’上海欧阳路218弄4-1202’,’’) 实现同样功能的Java程序代码是: sql = “insert intoksIno(考号,姓名,成绩,地址,简历)”; sql= =

Java知多少(97)框架窗口基础

窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这个窗口,当应用程序程序启动时,由系统创建和处理: 框架窗口(JFrame):这是通常意义上的窗口,它支持窗口周边的框架.标题栏,以及最小化.最大化和关闭按钮: 一种无边框窗口(JWindow):没有标题栏,没有框架,只是一个空的矩形. 用Swing中的JFrame类或它的子类创建的对象就是JFram

Java知多少(104)网络编程之统一资源定位符URL

统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址.超文本链路由统一资源定位符URL维持.URL的格式是: <METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE> 其中:Method是传输协议:HOSTNAME是文档和服务器所在的Internet主机名(域名系统中DNS中的点地址);PORT是服务端口号(可省略):PATH是路径名,FILE是文件名.例

Java知多少(96)绘图之设置字型和颜色

Java绘图中,显示文字的方法主要有三种:(1)drawString(String str,int x,int y):在指定的位置显示字符串.(2)drawChars(char data[],int offset,int length, int x, int y):在指定的位置显示字符数组中的文字,从字符数组的offset位置开始,最多显示length个字符.(3)drawBytes(byte data[],int offset,int length,int x,int y), 在指定的位置显示