java菜单

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

程序中实现菜单需要用到3个组件:JMenuBar、JMenuItem和JMenu。菜单条组件JMenuBar组件的功能是用来摆入JMenu组件。当建立了许多JMenu组件后,通过JMenuBar组件可将JMenu组件加入到窗口中。JMenuBar组件对于构造一个菜单来说是个不可缺少的组件,其构造方法如下:JMenuBar();//建立一个新的JMenuBar通过add()方法可以向JMenuBar组件中添加菜单。JMenuBar不支持事件监听器,在JMenuBar上产生的所有事件都会被JMenuBar组件自动处理。JFrame提供setJMenuBar()方法将JMenuBar组件放置在窗口上方,setJMenuBar()方法声明如下:publicvoidsetJMenuBar(JMenuBarmenubar);菜单组件JMenu组件是用来存放和整合JMenuItem的组件,它是构成一个菜单中不可或缺的组件之一。JMenu可以是单一层次的结构也可以是一个层次式的结构,要使用什么结构取决于界面在设计上的需要。其构造方法如下所示:JMenu();//建立一个JMenuJMenu(Actiona);//建立一个支持Action的JMenuJMenu(Strings);//以指定的字符串名称建立一个JMenuJMenu(String,Booleanb);//以指定的字符串名称建立一个JMenu并决定这个菜单是否具有下拉式的属性菜单项组件JMenuItem继承自AbstractButton类,因此JMenuItem具有许多AbstractButton的特性,和功能,例如加入图标文件或是当在菜单中选择某一项JMenuItem时就如同按下按钮触发ActionEvent,通过对ActionEvent的处理就可以针对不同的JMenuItem编写其对应的程序代码。JMenuItem的构造方法如下所示:JMenuItem();//建立一个JMenuItemJMenuItem(Actiona);//建立一个支持Action的JMenuItemJMenuItem(Iconicon);//建立一个有图标的JMenuItemJMenuItem(Stringtext);//建立一个有文字的JMenuItemJMenuItem(Stringtext,Iconicon);//建立一个有图标和文字的JMenuItemJMenuItem(Stringtext,intmnemonic);java.lang.Object--java.awt.Component--java.awt.Container--javax.swing.Jcomponent--javax.swing.JMenuBar--javax.swing.JPopupMenu--javax.swing.AbstractButton--javax.swing.JMenuItem--javax.swing.JMenu--javax.swing.JRadioButtonMenuItem--javax.swing.JCheckBoxMenuItem图6.19菜单组件的继承结构图//建立一个有文字和键盘快捷键的JMenuItem还可以创建带有复选框或选择按钮的菜单项,即创建JCheckBoxMenuItem、JRaionButtonMenuItem组件。从这两个组件的继承关系可以看出它们可以使用JMenuItem所提供的方法,又具有JCheckBox和JRadionButton的特性。例6.26使用菜单的实例importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMenuTestextendsJFrame{privatefinalColorcolorValues[]={Color.black,Color.blue,Color.red,Color.green};privateJRadioButtonMenuItemcolorItems[],fonts[];privateJCheckBoxMenuItemstyleItems[];privateJLabeldisplayLabel;privateButtonGroupfontGroup,colorGroup;privateintstyle;publicMenuTest(){super(UsingJMenus);JMenufileMenu=newJMenu(File);fileMenu.setMnemonic('F');//设置快捷键JMenuItemaboutItem=newJMenuItem(About...);aboutItem.setMnemonic('A');fileMenu.add(aboutItem);aboutItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){JOptionPane.showMessageDialog(MenuTest.this,Thisisanexample\nofusingmenus,About,JOptionPane.PLAIN_MESSAGE);}});JMenuItemexitItem=newJMenuItem(Exit);exitItem.setMnemonic('x');fileMenu.add(exitItem);exitItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){System.exit(0);}});JMenuBarbar=newJMenuBar();setJMenuBar(bar);bar.add(fileMenu);JMenuformatMenu=newJMenu(Format);formatMenu.setMnemonic('r');Stringcolors[]={Black,Blue,Red,Green};JMenucolorMenu=newJMenu(Color);colorMenu.setMnemonic('C');colorItems=newJRadioButtonMenuItem[colors.length];colorGroup=newButtonGroup();ItemHandleritemHandler=newItemHandler();for(intcount=0;countcolors.length;count++){colorItems[count]=newJRadioButtonMenuItem(colors[count]);colorMenu.add(colorItems[count]);colorGroup.add(colorItems[count]);colorItems[count].addActionListener(itemHandler);}colorItems[0].setSelected(true);formatMenu.add(colorMenu);formatMenu.addSeparator();//分隔线StringfontNames[]={Serif,Monospaced,SansSerif};JMenufontMenu=newJMenu(Font);fontMenu.setMnemonic('n');fonts=newJRadioButtonMenuItem[fontNames.length];fontGroup=newButtonGroup();for(intcount=0;countfonts.length;count++){fonts[count]=newJRadioButtonMenuItem(fontNames[count]);fontMenu.add(fonts[count]);fontGroup.add(fonts[count]);fonts[count].addActionListener(itemHandler);}fonts[0].setSelected(true);fontMenu.addSeparator();StringstyleNames[]={Bold,Italic};styleItems=newJCheckBoxMenuItem[styleNames.length];StyleHandlerstyleHandler=newStyleHandler();for(intcount=0;countstyleNames.length;count++){styleItems[count]=newJCheckBoxMenuItem(styleNames[count]);fontMenu.add(styleItems[count]);styleItems[count].addItemListener(styleHandler);}formatMenu.add(fontMenu);bar.add(formatMenu);displayLabel=newJLabel(SampleText,SwingConstants.CENTER);displayLabel.setForeground(colorValues[0]);displayLabel.setFont(newFont(Serif,Font.PLAIN,72));getContentPane().setBackground(Color.CYAN);getContentPane().add(displayLabel,BorderLayout.CENTER);setSize(500,200);setVisible(true);}publicstaticvoidmain(Stringargs[]){MenuTestapplication=newMenuTest();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}privateclassItemHandlerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){for(intcount=0;countcolorItems.length;count++)if(colorItems[count].isSelected()){displayLabel.setForeground(colorValues[count]);break;}for(intcount=0;countfonts.length;count++)if(event.getSource()==fonts[count]){displayLabel.setFont(newFont(fonts[count].getText(),style,72));break;}repaint();}}privateclassStyleHandlerimplementsItemListener{publicvoiditemStateChanged(ItemEvente){style=0;if(styleItems[0].isSelected())style+=Font.BOLD;if(styleItems[1].isSelected())style+=Font.ITALIC;displayLabel.setFont(newFont(displayLabel.getFont().getName(),style,72));repaint();}}}程序运行结果如下图所示:弹出式菜单是一种特别形式的菜单,其性质与菜单几乎完全相同,只是PopupMenu并不固定在窗口的任何一个位置,而是根据鼠标位置由系统判

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功