在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中常用的一些菜单
java菜单如何点解_解读java菜单
最新推荐文章于 2024-03-26 08:11:37 发布