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的常用方法有:
- add(JMenu m):将菜单m加入到菜单条中。
- countJMenus():获得菜单条中菜单条数。
- getJMenu(int p):取得菜单条中的菜单。
- remove(JMenu m):删除菜单条中的菜单m。
2. 菜单
由类JMenu创建的对象就是菜单。类JMenu的常用方法如下:
- JMenu():建立一个空标题的菜单。
- JMenu(String s):建立一个标题为s的菜单。
- add(JMenuItem item):向菜单增加由参数item指定的菜单选项。
- add(JMenu menu):向菜单增加由参数menu指定的菜单。实现在菜单嵌入子菜单。
- addSeparator():在菜单选项之间画一条分隔线。
- getItem(int n):得到指定索引处的菜单项。
- getItemCount():得到菜单项数目。
- insert(JMenuItem item,int n):在菜单的位置n插入菜单项item.
- remove(int n):删除菜单位置n的菜单项
- removeAll():删除菜单的所有菜单项。
3.菜单项
类JMenuItem 的实例就是菜单项。类JMenuItem的常用方法如下:
- JMenuItem():构造无标题的菜单项。
- JMenuItem(String s):构造有标题的菜单项。
- setEnabled(boolean b):设置当前单项是否可被选择。
- isEnabled():返回当前菜单项是否可被用户选择。
- getLabel():得到菜单项的名称。
- setLabel():设置菜单选项的名称。
- addActionListener(ActionListener e):为菜单项设置监视器。监视器接受点击某个菜单的动作事件。
4. 处理菜单事件
菜单的事件源是用鼠标点击某个菜单项。处理该事件的接口是ActionListener,要实现的接口方法是actionPerformed(ActionEvent e),获得事件源的方法getSource().
【例 11-15】小应用程序示意窗口有菜单条的实现方法。设有一个按钮,当按钮处于打开窗口状态时,单击按钮将打开一个窗口,窗口设有一个菜单条,有两个菜单,每个菜单又各有三个菜单项。当一个菜单项被选中时,菜单项监视方法在文本框中显示相应菜单项被选中字样。
import java.applet.*
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MenuWindow extends JFrame implements ActionListener{
public static JtextField text;
private void addItem(JMenu Menu,String menuName,ActionListener listener){
JMenuItem anItem = new JMenuItem(menuName);
anItem.setActionCommand(menuName);
anItem.addActionListener(listener);
Menu.add(anItem);
}
public MenuWindow(String s,int w,int h){
setTitle(s);
Container con = this.getContentPane();
con.setLayout(new BorderLayout());
this.setLocation(100,100);
this.setSize(w,h);
JMenu menu1 = new JMenu("体育");
addItem(menu1," 跑步",this);
addItem(menu1," 跳绳",this);
addItem(menu1,"打球",this);
JMenu menu2 = JMenu("娱乐");
addItem(menu2,"唱歌",this);
addItem(menu2,"跳舞",this);
addItem(menu2,"游戏",this);
JMenuBar menubar = new JMenuBar();
text = new JTextField();
menubar.add(menu1);
menubar.add(menu2);
setJMenuBar(MenuBar);
con.add(text,BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e){
text.setText(e.getActionCommand()+"菜单项被选中!");
}
}
public class Example6_5 extends Applet implements ActionListener{
MenuWindow window;
JButton button;
boolean bflg;
public void init(){
button = new JButton("打开我的体育娱乐之窗");bflg =true;
window = new MenuWindow("体育娱乐之窗",100,100);
button.addActionListener(this);
add(button);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==button){
if(bflg){
window.setVisible(true);
bflg = false;
button.setLabel("关闭我的体育娱乐之窗");
}
else{
window.setVisible(false);
bflg = true;
button.setLabel("打开我的体育娱乐之窗");
}
}
}
}
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运行环境。例如,以下示意代码:
…
item7 = new MenuItem(“退出”);
item7.addActionListener(this);
…
public void actionPerformed(ActionEvent e){
if(e.getSource()==item7){
System.exit(0);
}
}
7.设置菜单项的快捷键
用MenuShortcut类为菜单项设置快捷键。构造方法是MenuShortcut(int key)。其中key可以取值KeyEvent.VK_A至KenEvent.VK_Z,也可以取 ‘a’到 ‘z’键码值。菜单项使用setShortcut(MenuShortcut k)方法来设置快捷键。例如,以下代码设置字母e为快捷键。
class Herwindow extends Frame implements ActionListener{
MenuBar menbar;
Menu menu;
MenuItem item;
MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_E);
…
item.setShortcut(shortcut);
…
}
选择框菜单项
菜单也可以包含具有持久的选择状态的选项,这种特殊的菜单可由JCheckBoxMenuItem类来定义。JCheckBoxMenuItem对象像选择框一样,能表示一个选项被选中与否,也可以作为一个菜单项加到下拉菜单中。点击JCheckBoxMenuItem菜单时,就会在它的左边出现打勾符号或清除打勾符号。例如,在例6.5程序的类MenuWindow中,将代码
addItem(menu1,“跑步”,this);addItem(menu1,”跳绳”,this);
改写成以下代码,就将两个普通菜单项“跑步“和“跳绳”改成两个选择框菜单项:
JCheckBoxMenuItem item1 = new JCheckBoxMenuItem(“跑步”);
JCheckBoxMenuItem item2 = new JCheckBoxMenuItem(“跳绳”);
item1.setActionCommand(“跑步”);
item1.addActionListener(this);
menu1.add(item1);
item2.setActionCommand(“跳绳”);
item2.addActionListener(this);
menu1.add(item2);
系列文章:
Java知多少(89)列表和组合框的更多相关文章
- Java知多少(88)列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...
- Java知多少(87)选择框和单选按钮(转)
选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...
- Java知多少(86)文本框和文本区的输入输出
在GUI中,常用文本框和文本区实现数据的输入和输出.如果采用文本区输入,通常另设一个数据输入完成按钮.当数据输入结束时,点击这个按钮.事件处理程序利用getText()方法从文本区中读取字符串信息.对 ...
- Java知多少(87)选择框和单选按钮
选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...
- 十. 图形界面(GUI)设计9.列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...
- Java知多少(85)文本框和文本区
在图形界面中,文本框和文本区是用于信息输入输出的组件. 文本框 文本框(JTextField)是界面中用于输入和输出一行文本的框.JTextField类用来建立文本框.与文本框相关的接口是Action ...
- Java知多少(完结篇)
Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...
- Java知多少(下)
Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
随机推荐
- Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(三)--前后端环境配置
前言 之前都是介绍一些基础知识,在这一节,我们就要开始实战coding了.正所谓磨刀不误砍柴工,准备工作显得尤为重要.很多demo只是追求效果的实现,并不注重整个demo的架构性.从我个人的角度看来, ...
- [ 原创 ] centos安装tomcat,启动成功 无法访问
https://blog.csdn.net/realjh/article/details/82048492 Linux下Centos7对外开放端口 2018年08月25日 09:53:42 jeter ...
- Codeforces.1045A.Last chance(最大流ISAP 线段树优化建图)
题目链接 \(Description\) 你需要用给定的\(n\)个武器摧毁\(m\)架飞船中的某一些.每架飞船需要被摧毁恰好一次. 武器共三种:1.可以在给定的集合中摧毁一架飞船:2.可以摧毁区间\ ...
- JVM调优总结 -Xms -Xmx -Xmn -Xss(转)
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...
- Convert a VMDK (VMWare) file to VHDX (Hyper-V)
https://www.meziantou.net/2016/09/09/convert-a-vmdk-vmware-file-to-vhdx-hyper-v Microsoft provides a ...
- window7 更改电脑黑屏时间
无废话--------------------Window7 更改电脑黑屏时间,步骤如下: 1.进入‘控制面板’,通过开始页面或通过计算机我的电脑中的打开‘控制面板’都可以打开. 2.系统与安全类别下 ...
- android:各种访问权限Permission
在Android的设计中,资源的访问或者网络连接,要得到这些服务都需要声明其访问权限,否则将无法正常工作.在Android中这样的权限有很多种,这里将各类访问权限一一罗列出来,供大家使用时参考之用. ...
- Android防止进程被第三方软件杀死
http://blog.csdn.net/wangliang198901/article/details/12342845 http://stackoverflow.com/questions/385 ...
- .NetCore中EFCore for MySql整理(三)之Pomelo.EntityFrameworkCore.MySql
一.Pomelo.EntityFrameworkCore.MySql简介 Git源代码地址:https://github.com/PomeloFoundation/Pomelo.EntityFrame ...
- [Python设计模式] 第6章 衣服搭配系统——装饰模式
github地址:https://github.com/cheesezh/python_design_patterns 题目 设计一个控制台程序,可以给人搭配嘻哈风格(T恤,垮裤,运动鞋)或白领风格( ...