解读java菜单

来源:互联网 发布:淘宝优惠群是真的吗 编辑:程序博客网 时间:2024/04/29 21:10

  在java中,其菜单的设计与实现,样式众多,机动灵活,自成一体系.下面我们就细说一下,这java菜单的奥密,从中也可以领略Java菜单实现的多样化.
    菜单分为三类,一类是固定的,即程序顶上的下拉式菜单,一类是弹出式菜单,另一类则是浮动式菜单.先来看第一类,固定的菜单.
欲建立固定菜单,先要建立一JMenuBar对象,它包含了所有的下拉式菜单,建立的方式如:
JMenuBar menubar = new JMenuBar();
    该JMenuBar可以放在窗体的任何地方,通常我们将它放在窗体的顶部.可以使用如下方法将JMenuBar加入窗体:
JFrame.setJMenuBar(menubar);
    有了容纳菜单的容器,接下来,就该建立菜单了.与windows菜单设计一样,有多少列菜单就需要有多少个菜单对象,菜单对象的建立方式如:JMenu menuFile = new JMenu("File");建立了一个顶级菜单,就要将它加入到MenuBar中,这就要用到JMenuBar的add方法了:
    menubar.add(menuFile);
    有了顶级菜单就要下拉菜单项,如果设计下拉菜单项呢?这就有点复杂了.它的实现方法不只一种.下面我们逐个讨论.
    1.使用String建立JMenuItem对象.
    JMenuItem newItem = new JMenuItem("New");
    加入顶级菜单:menuFile.add(newItem);
    2.使用Action建立JMenuItem对象.
    Action exitAction = new AbstractAction("Exit"){
     public void actionPerformed(ActionEvent e){
      System.exit(0);
     }
    });
    JMenuItem exitItem = new JMenuItem(exitAction);
    menuFile.add(exitAction);
    或
    JMenuItem exitItem = menuFile.dd(exitAction);
    3.不通过建立JMenuItem对象,直接由顶级菜单加入.
    JMenuItem openItem = menuFile.add("Open");
   
    在这里再介绍一下顶级菜单的一些其它方法:
    menuFile.addSeparator();在下拉菜单间加入分隔线
    menuFile.insert(JMenuItem menu,int index);在指定位置插入下拉菜单项
    menuFile.insert(Action a,int index);作用同上
    menuFile.insertSeparator(int index);在指定位置插入菜单间分隔线
    menuFile.remove(int index);删除指定位置的下拉菜单项
    menuFile.remove(JMenuItem item);删除指定名称的下拉菜单项
    在下拉菜单项中有一个方法可以使下拉菜单项有效或无效,即: JMenuItem.setEnable(boolean state);
   
    现在下拉菜单已经加上了,该是让它们做点什么的时候了.如果你是用Action实现的下拉菜单项,在其actionPerformed方法中已经定义了做 进行的动作.当点击它时就会执行你在其中定义的实体了.但是没有它Action实的该怎么办呢?这里就要引入Java的监听器机制了.以下拉菜单项 Open为例.ActionListener监听器,相信大家一定比较熟悉了吧.那就先建一个类,继承ActionListener,因为它里面只有一个 方法,所以实现它即可.下面这个或许对你有帮助:
    class ActionHandler implements ActionListener{
     public void actionPerformed(ActionEvent e){
      //做你想做的事
     }
    }
    好,建立了监听器,现在我们把监听器与下拉菜单项关联起来.方法仍然是使用add,
    openItem.add(new ActionHandler());
    这样,当你点击Open菜单项时,就会做你事先定义好的事情了.
   
    如果在下拉菜单中还有下一层下拉菜单,又该如何实现呢?这个说来也简单,它的实现与上面有些类似.首先建立一个JMenu菜单,加入需要的下拉菜单项,最后在顶级菜单中使用add方法将其加入.
   
    在windows程序中,下拉菜单项前大多都有个小图标,这在java中又如何实现呢?
    JMenuItem实际是继承自AbstractButton,所以它有点像button.在button中加入图标,大家自然熟知.在菜单中加入也是类似.
    JMenuItem openItem = new JMenuItem("Open","open.gif");
    在Action中我们也可以如此实现:
    Action exitAction = new AbstractAction("Exit","exit.gif"){
     public void actionPerformed(ActionEvent e){
      System.exit(0);
     }
    });
    如果Action在建立时没有加入图标,仍然可以再加上去,那就是使用如下的方法:
    exitAction.putValue(Action.SMALL_ICON,"exit.gif");
    java中还有一个有趣的方法,它可以将菜单项中的图标与文字倒个个显示,不妨你也试试:
    openItem.setHorizontalTextPosition(SwingConstants.LEFT);这一句就将文字放在了图标的左边, 要重新放回图标的右边,改变一下参数即 可:openItem.setHorizontalTextPosition(SwingConstants.RIGHT);
   
    下面就来说一说,菜单项中的复选框和单选按钮.
    建立复选框菜单项,按如下的方法实现即可:
    JCheckBoxMenuItem cbItem = new JCheckBoxMenuItem("Save");
    或
    JCheckBoxMenuItem cbItem = new JCheckBoxMenuItem("Save",true);这样,该项在载入时就是选中状态
    建立单选框单项,按如下的方法实现即可:
    JRadioButtonMenuItem rbItem = new JRadioButtonMenuItem("Save As");
    或
    JRadioButtonMenuItem rbItem = new JRadioButtonMenuItem("Save As",true);
    与JRaidoButton类似,多个单选按钮菜单项也必须放在ButtonGroup中,才会实现单选.如:
    JRadioButtonMenuItem helloItem = new JRadioButtonMenuItem("Hello");
    ButtonGroup group = new ButtonGroup();
    group.add(rbItem);
    group.add(helloItem);
    以上两项因都继承于AbstractButton所以,都可以使用方法setSelected(true)和isSelected()来设定和获取当前的选中状态.
   
    菜单的主体工程已经完成了,现在我们再美化一下,加上诸如记忆键和加速键功能.
    在建立顶级菜单及下拉菜单项时,可以把记忆键也初始化加入:JMenuItem openItem = new JMenuItem("Open",'O');
    在顶级菜单JMenu和下拉菜单项JMenuItem中也都可以使用这样一种方法来增加记忆键:setMnemonic(int c);但如果在下拉菜单项中增加的是Action就不能用此方法了,它有另外一种方法来增加记忆键, 如:ActionItem.putValue(Action.MNEMONIC_KEY,new Integer('x'));
    当然还有一个方法可以增加记忆键,这个方法是用指定菜单文字的第几个字母为记忆键,如:
    openItem.setDisplayedMnemonicIndex(int c);
    菜单文字的索引顺序是从0开始的.
    但日常的操作中,我们最常用的还是加速键,在java中,加速键的附加用如下方法:
    openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));   
   
   
    接下来,我们该谈一谈另一大类菜单 -- 弹出式菜单了.
    它的建立与建立普通菜单有点类似,但可以不需要加标题.
    JPopupMenu popup = new JPopupMenu();
    这其实就是它的顶级菜单了,有了它,我们才可以得以继续建立后面的菜单项.
    JMenuItem cutItem = new JMenuItem("Cut");
    popup.add(cutItem);
    这里菜单项的建立与加入方法与普通菜单完全相同,大家可以参照上面的做法.
    使用弹出式菜单的show方法可以在需要的部件上将其显示出来.
    popup.show(JComponent c,int x,int y);
    但是在哪里执行这个显示动作呢?这里就又要劳动监听器的大驾了.比如,要在一个标签上实现弹出式菜单,可以这么做:
    JLabel label1 = new JLabel("hello 庆");
    label1.addMouseListener(new MouseHandler());
    class MouseHandler extends MouseAdapter{
     public void mouseReleased(MouseEvent e){
      if (e.isPopupTrigger()){
       popup.show(label1,e.getX(),e.getY());
      }
     }
    }
    运行一下,右击该标签看看会不会弹出菜单.
   
    最后,也该不固定菜单,即浮动菜单出场了.
    浮动菜单,在我们的软件操作中,是经常用到的.它可以被随意移到任意位置,可以附着,也可以独立于附体.那么在Java中又是如何实现这一切的呢?这里就又要引入一个新的swing组件了,它就是JToolBar.我们可以这样来创建一个JToolBar的实例:
    JToolBar toolbar = new JToolBar();
    这是最简单的方式,我们还可以再加上标签,JToolBar toolbar = new JToolBar(String label);
    如果你想让浮动菜单一开始就具有你想要的比如横的还是竖的方式,可以在创建时加上它的方向参数:
    JToolBar toolbar = new JToolBar(int orientation);
    当然,我们也可以把它们合成在一起.JToolBar toolbar = new JToolBar(String label,int orientation);
    int orientation的取值为常数:SwingConstants.HORIZONTAL,SwingConstants.VERTICAL
    在JToolBar中我们可以增加各种组件,最常加的就是按钮,当然我们也可以加入标签,带图片或文字的Action,组合框等.如:
    toolbar.add(exitAction);
    如同以上几例,我们同样可以在JToolBar中增加组件间的分隔条.toolbar.addSeparator();
    在我们使用软件中,当鼠标停在某个组件图标上时,就会显示一个小小的提示,在这里我们也可以实现:如果是普通的组件,可以使用如下方 法:refreshButton.setToolTipText("刷新");但如果加入的是Action,则还是要使用putValue方法,只是引入 的参数不同:
    exitAction.putValue(Action.SHORT_DESCRIPTION, "Exit");
    当运行程序时,你将看到,浮动工具栏是如何的灵活.
   
    到此,我们已经完成了Java中常用的一些菜单

原创粉丝点击