在这篇文章中,笔者会介绍Java图形界面编程中菜单组件的用法。关于菜单组件,因为java存在AWT编程和Swing编程,所以菜单组件也存在AWT菜单和Swing菜单。因为Swing组件使用的比较多,所以笔者的案例中都是运用Swing菜单中的类。

在介绍Swing菜单之前,先看看AWT菜单组件的类关系图:

Swing菜单组件与AWT菜单组件中的类结构类似。

Swing菜单组件的用法在API中已经给出了,所以笔者在这里不必要列出。这里笔者要说一说,Swing菜单组件中的快捷键,下面笔者会详细介绍Swing中菜单的快捷键。

public void setMnemonic(int mnemonic)

这个方法可以设置键盘助记字符,不过该方法的使用是依赖Swing组件的菜单分层结构的,也就是说设置了该助记字符的菜单项目必须已经展开了,才能使用(通过和Alt+键结合使用),

例如:

        JFrame jf=new JFrame("窗口测试");

        JMenuBar bar=new JMenuBar();
JMenu file=new JMenu("菜单 ");
JMenuItem createfile=new JMenuItem("创建文件 VK_N"); createfile.setMnemonic(KeyEvent.VK_N);
createfile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("创建文件被点击");
}
}); file.add(createfile);
bar.add(file); jf.setJMenuBar(bar);
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);

效果图为:

如果在上面这种图片的效果下,摁下Ctr+N的话,控制台是不会打印东西的,只有把鼠标移到菜单上,看见“创建菜单”项后,使用Ctr+N控制台才会打印消息。

值得注意的是 setMnemonic 并非是JMenuItem的方法,而是来着他的父类AbstractButton的,所以该方法通常是不应用于菜单项的。

JMenuItem自身有一个方法 public void setAccelerator(KeyStroke keyStroke) 该方法的功能要比上面的那个方法要强大,该方法可以设置菜单项的快捷键,它是不依赖菜单的分层结构的。

例如:

        JFrame jf=new JFrame("窗口测试");

        JMenuBar bar=new JMenuBar();
JMenu file=new JMenu("菜单 ");
JMenuItem createfile=new JMenuItem("创建文件"); createfile.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK));
createfile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("创建文件被点击");
}
}); file.add(createfile);
bar.add(file); jf.setJMenuBar(bar);
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);

效果图:

摁下Ctr+N键的话,控制台就会打印消息了。

同时我们也可以看到,快捷键也被附加在文字的后面了。

【Java】详解菜单组件的更多相关文章

  1. Java 详解 JVM 工作原理和流程

    Java 详解 JVM 工作原理和流程 作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java ...

  2. Unity Jobsystem 详解实体组件系统ECS

    原文摘选自Unity Jobsystem 详解实体组件系统ECS 简介 随着ECS的加入,Unity基本上改变了软件开发方面的大部分方法.ECS的加入预示着OOP方法的结束.随着实体组件系统ECS的到 ...

  3. [转]详解C#组件开发的来龙去脉

    C#组件开发首先要了解组件的功能,以及组件为什么会存在.在Visual Studio .NET环境下,将会有新形式的C#组件开发. 组件的功能 微软即将发布的 Visual Studio .NET 将 ...

  4. Angular6 学习笔记——组件详解之组件通讯

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  5. 逆向工程生成的Mapper.xml以及*Example.java详解

    逆向工程生成的接口中的方法详解 在我上一篇的博客中讲解了如何使用Mybayis逆向工程针对单表自动生成mapper.java.mapper.xml.实体类,今天我们先针对mapper.java接口中的 ...

  6. Floyd算法(三)之 Java详解

    前面分别通过C和C++实现了弗洛伊德算法,本文介绍弗洛伊德算法的Java实现. 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3. 弗洛伊德算法的代码说明 4. 弗洛伊德算法的源码 转载请注明 ...

  7. Prim算法(三)之 Java详解

    前面分别通过C和C++实现了普里姆,本文介绍普里姆的Java实现. 目录 1. 普里姆算法介绍 2. 普里姆算法图解 3. 普里姆算法的代码说明 4. 普里姆算法的源码 转载请注明出处:http:// ...

  8. Kruskal算法(三)之 Java详解

    前面分别通过C和C++实现了克鲁斯卡尔,本文介绍克鲁斯卡尔的Java实现. 目录 1. 最小生成树 2. 克鲁斯卡尔算法介绍 3. 克鲁斯卡尔算法图解 4. 克鲁斯卡尔算法分析 5. 克鲁斯卡尔算法的 ...

  9. 拓扑排序(三)之 Java详解

    前面分别介绍了拓扑排序的C和C++实现,本文通过Java实现拓扑排序. 目录 1. 拓扑排序介绍 2. 拓扑排序的算法图解 3. 拓扑排序的代码说明 4. 拓扑排序的完整源码和测试程序 转载请注明出处 ...

随机推荐

  1. linux kernel系列四:嵌入式系统中的文件系统以及MTD

    本节介绍File System和MTD技术 一 FS 熟知的FS有ext2,3,4.但是这些都是针对磁盘设备的.而ES中一般的存储设备为Flash,由于Flash的特殊性: Flash存储按照Bloc ...

  2. Cognos11中通过URL访问report的设置

    1:以往的cognos版本中在报表的属性中可以找到 url的属性,稍加修改就可以通过URL进行访问了 2:Cognos11中找了半天也没有报表URL这个属性,但是IBM官方也给出了解决方案 Answe ...

  3. ps叠加模式笔记

    1.叠加模式:Overlay混色模式会让图层白色的部分去加亮底色,图层深色的部分去加暗底色 2.常见按钮:1)主体渐变:2)投影:3)内阴影:颜色减淡,按钮颜色,距离1,大小3:4)外发光,正片叠底,

  4. [PureScript] Basic Data Constructors in PureScript

    PureScript types are very extensive and we are going to experiment with type constructors and how to ...

  5. 关于Linux路由表的route命令

    转自:http://www.cnblogs.com/gunl/archive/2010/09/14/1826234.html 查看 Linux 内核路由表 使用下面的 route 命令可以查看 Lin ...

  6. Creating objects on stack or heap

    class Player {  private: int health;  int strength;  int agility; public: void move(); void attackEn ...

  7. LintCode: Search A 2d Matrix

    1. 设查找的数位y,第一行最后一列的数位x 如果x<y,x是第一行最大的,所以第一行都小于y,删除第一行: 如果x>y,x是最后一列最小的,所以最后一列都大于y,删除最后一列: 这样保证 ...

  8. 带你走进EJB--将EJB发布为Webservice(2)

    在企业级的应用程序中经常都要把用不同语言写成的.在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量. 简单的一个例子:应用程序经常需要从运行在A主机上的程序中获取数据:或者把数据发送到 ...

  9. vasa构架

  10. ubuntu iptables设置【转】

    root@qustdjx-K42JZ:/home/qustdjx# iptables -L -nChain INPUT (policy ACCEPT)target     prot opt sourc ...