博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swing-JMenu菜单用法-入门
阅读量:6689 次
发布时间:2019-06-25

本文共 8382 字,大约阅读时间需要 27 分钟。

菜单是Swing客户端程序不可获取的一个组件。窗体菜单大致由菜单栏、菜单和菜单项三部分组成,如下图所示:

由图可见,对于一个窗体,首先要添加一个JMenuBar,然后在其中添加JMenu,在JMenu中添加JMenuItem。JMenuItem是最小单元,它不能再添加Jmenu或JMenuItem。而JMenu是可以再添加JMenu的,比如上图中的New菜单。可以添加横线将内部成员分隔开,也就是图中的Seperator。仔细看,每一个JMenu都有一个字母带有下划线,该字母就是该菜单的快捷键,使用setMnemonic方法设置,菜单项也一样,设置后的效果是在能看到该项的界面中,按下该键则触发该项;图中的“Ctrl + W”是该菜单项的加速器,它的作用是,在窗体中按下该键值组合后,该项即被触发,即使它是不可见的,使用setAccelerator设置。需要注意,JMenu无法使用加速器,也就是说使用swing无法直接像图中那样添加“Alt + Shift + N”。

下面是菜单的常用方法:

 

为了练手,我们就来实现Eclipse的菜单吧!

下面是代码

JMenuDemo.java

package Swing;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.KeyStroke;/* * 模仿Eclipse菜单栏结构 */public class JMenuDemo extends JFrame {    String[][] menuNameMnemonics = { { "File", "f" }, { "Edit", "e" },            { "Source", "s" }, { "Refactor", "t" }, { "Navigate", "n" },            { "Search", "a" }, { "Project", "p" }, { "Run", "r" }, { "Window", "w" }, { "Help", "h" } };    JMenuBar menuBar;    public JMenuDemo() {        menuBar = new JMenuBar();        setJMenuBar(menuBar);                for (String[] menuNameMnemonic : menuNameMnemonics) {            menuBar.add(createMenu(menuNameMnemonic[0], menuNameMnemonic[1]));        }                // 为File添加子菜单和菜单项        JMenu fileMenu = getMenu("File");        fileMenu.add(createMenuNamedNew());                fileMenu.add(createMenuItem("Open File", null, null,null));        fileMenu.addSeparator();                fileMenu.add(createMenuItem("Close", "c", null, KeyStroke.getKeyStroke('W', InputEvent.CTRL_MASK)));        fileMenu.add(createMenuItem("Close All", "l", null, KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)));        fileMenu.addSeparator();        fileMenu.add(createMenuItem("Save", "s", new ImageIcon("resources\\JMenuDemo\\icon\\Save.png"), KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)));        fileMenu.add(createMenuItem("Save As", "a", new ImageIcon("resources\\JMenuDemo\\icon\\SaveAs.png"), null));        fileMenu.add(createMenuItem("Save All", "e", new ImageIcon("resources\\JMenuDemo\\icon\\SaveAll.png"), KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK)));        fileMenu.add(createMenuItem("Revert", "t", null, null));        fileMenu.addSeparator();                JMenuItem menuNamedMove = createMenuItem("Move", "v", null, KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));        menuNamedMove.setEnabled(false);        fileMenu.add(menuNamedMove);                JMenuItem menuNamedRename = createMenuItem("Rename", "m", new ImageIcon("resources\\JMenuDemo\\icon\\Rename.png"), KeyStroke.getKeyStroke("F2"));        menuNamedRename.setEnabled(false);        fileMenu.add(menuNamedRename);                fileMenu.add(createMenuItem("Refresh", "f", new ImageIcon("resources\\JMenuDemo\\icon\\Refresh.png"), KeyStroke.getKeyStroke("F5")));                JMenu menuNamedConvert = createMenuNamedConvert();        fileMenu.add(menuNamedConvert);//添加New菜单                fileMenu.addSeparator();        fileMenu.add(createMenuItem("Print", "p", new ImageIcon("resources\\JMenuDemo\\icon\\Print.png"), KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK)));        fileMenu.addSeparator();                JMenu menuNamedSwitch = createMenu("Switch WorkSpsace", "w");        menuNamedSwitch.add(createMenuItem("Other", "o", null, null));        fileMenu.add(menuNamedSwitch);                fileMenu.add(createMenuItem("Restart", null, null, null));        fileMenu.addSeparator();        fileMenu.add(createMenuItem("Import", "i", new ImageIcon("resources\\JMenuDemo\\icon\\Import.png"), null));        fileMenu.add(createMenuItem("Export", "o", new ImageIcon("resources\\JMenuDemo\\icon\\Export.png"), null));        fileMenu.addSeparator();        fileMenu.add(createMenuItem("Properties", "r", null, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.ALT_MASK)));        fileMenu.addSeparator();        fileMenu.add(createMenuItem("Exit", "x", null, null));    }    private JMenu createMenuNamedNew() {        /*         * * 创建名称为New的menu         */        JMenu menu = createMenu("New", "n");                menu.add(createMenuItem("JavaProject", null, new ImageIcon("resources\\JMenuDemo\\icon\\JavaProject.gif"), null));        menu.add(createMenuItem("Project", null, new ImageIcon("resources\\JMenuDemo\\icon\\Project.gif"), null));        menu.add(createMenuItem("Package", null, new ImageIcon("resources\\JMenuDemo\\icon\\Package.gif"), null));        menu.add(createMenuItem("Class", null, new ImageIcon("resources\\JMenuDemo\\icon\\Class.gif"), null));        menu.add(createMenuItem("Interface", null, new ImageIcon("resources\\JMenuDemo\\icon\\Interface.gif"), null));        menu.add(createMenuItem("Enum", null, new ImageIcon("resources\\JMenuDemo\\icon\\Enum.gif"), null));        menu.add(createMenuItem("Annotation", null, new ImageIcon("resources\\JMenuDemo\\icon\\Annotation.gif"), null));        menu.add(createMenuItem("SourceFolder", null, new ImageIcon("resources\\JMenuDemo\\icon\\SourceFolder.gif"), null));        menu.add(createMenuItem("JavaWorkingSet", null, new ImageIcon("resources\\JMenuDemo\\icon\\JavaWorkingSet.gif"), null));        menu.add(createMenuItem("Folder", null, new ImageIcon("resources\\JMenuDemo\\icon\\Folder.gif"), null));        menu.add(createMenuItem("File", null, new ImageIcon("resources\\JMenuDemo\\icon\\File.gif"), null));        menu.add(createMenuItem("UntitledTextFile", null, new ImageIcon("resources\\JMenuDemo\\icon\\UntitledTextFile.gif"), null));        menu.add(createMenuItem("JunitTestCase", null, new ImageIcon("resources\\JMenuDemo\\icon\\JunitTestCase.gif"), null));        menu.add(createMenuItem("Task", null, new ImageIcon("resources\\JMenuDemo\\icon\\Task.gif"), null));        menu.add(createMenuItem("Example", null, new ImageIcon("resources\\JMenuDemo\\icon\\Example.gif"), null));        menu.add(createMenuItem("Other", null, new ImageIcon("resources\\JMenuDemo\\icon\\Other.gif"), null));        return menu;    }        private JMenu createMenuNamedConvert() {        /*         * 创建名称为Convert的menu         */        JMenu menu = createMenu("Convert Line Delimiters to", "v");        menu.add(createMenuItem("Windows (CRLF, \\r\\n, 0D0A, xx)[default]", "w", null, null));        menu.add(createMenuItem("Unix (LF, \\n, 0A, xx)", "n", null, null));        return menu;    }    private JMenu getMenu(String menuName) {        /*         * 根据名称从menuBar中查找menu并返回         */        JMenu menu = null;        for (int i = 0; i < menuBar.getMenuCount(); i++) {            menu = menuBar.getMenu(i);            if (menu.getText().equals(menuName))                return menu;        }        return null;    }    private JMenu createMenu(String name, String mnemonic) {        /*         * 根据名称和快捷键创建menu并添加到menuBar         */        JMenu menu = new JMenu(name);        if (mnemonic != null)            menu.setMnemonic(mnemonic.toCharArray()[0]);        return menu;    }    private JMenuItem createMenuItem(String name, String mnemonic, Icon icon, KeyStroke keyStroke) {        /*         * 根据名称和快捷键创建menu并添加到menuBar         */        JMenuItem menuItem = new JMenuItem(name, icon);        if (mnemonic != null)            menuItem.setMnemonic(mnemonic.toCharArray()[0]);        if (keyStroke != null)            menuItem.setAccelerator(keyStroke);        return menuItem;    }    public static void main(String[] args) {        // TODO Auto-generated method stub        // 创建窗体        JMenuDemo frame = new JMenuDemo();        //指定标题        frame.setTitle("JMenuDemo");        //指定icno        frame.setIconImage(new ImageIcon("resources\\JMenuDemo\\icon\\Eclipse.png").getImage());        // 关闭窗体后退出程序        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        // 自动适配所有控件大小        frame.setSize(frame.getPreferredSize().width, 200);        //frame.pack();        // 设置窗体位置在屏幕中央        frame.setLocationRelativeTo(null);        // 显示窗体        frame.setVisible(true);    }}

 

效果图0:

效果图1:

 

效果图2:

 

效果图3:

PS:所有图标都是使用截图工具截出来的,格式有png和gif两种。New菜单里面的图标都是gif格式,可以看到带有雪花点;而png图标效果就非常好,推荐使用。

PS2:然而博客里面无法提供图标附件,所以各位客官您只能自己动手截图了。图标路径如下:

 

转载于:https://www.cnblogs.com/pzy4447/p/4652697.html

你可能感兴趣的文章
我的友情链接
查看>>
OpenStack各服务所用端口号总结
查看>>
多线程并发下载图片NSThread
查看>>
Big Faceless Java Pdf报表生成器控件介绍
查看>>
hadoop kill mapreduce job
查看>>
XPE常见问题整理
查看>>
Vim编辑器详解
查看>>
sql 查询几个工作日之后的日期
查看>>
zeromq的使用:例子分析
查看>>
ubuntu16.04的启动栏更改和窗口特效关闭
查看>>
我的友情链接
查看>>
java --log4j
查看>>
Nginx之server指令
查看>>
用普通计算机假设基于liunx系统的NAS部署FineReport决策系统
查看>>
shell日常脚本
查看>>
从尾到头打印链表
查看>>
百度笔试题面试题集总
查看>>
Nginx 499 报错,tomcat大量超时
查看>>
马兴150809305 飞机
查看>>
MySQL主从复制之半同步模式
查看>>