目录
01 菜单组件介绍
02 实例代码
01 菜单组件介绍
菜单也是最常用的GUI组件之一,Swing包中提供了多种菜单组件,包括JMenuBar、JMenuItem、JMenu、JCheckBoxMenuItem、JRadioButtonMenuItem和JPopupMenu等。菜单有下拉式菜单和弹出式菜单两种,本节介绍下拉式菜单,这是最常用的一类菜单
菜单栏及菜单
菜单栏是窗口中的主菜单,用来包容一组菜单。比如菜单栏中包含了3个下拉菜单,这3个菜单的名字分别是“File”“Option”和“Help”。菜单是最基本的下拉菜单,用来包容一组菜单项或子菜单,比如“File”中列出了4个菜单项。菜单栏只有一种构造方法,即JMenuBar( )。JFrame、JApplet和JDialog等类中都定义setJMenuBar(JMenuBar menu)方法,可以把菜单栏放到窗口的上方,
例如:
JFrame frame = new JFrame(“ Menu Demo”);
// 菜单窗口标题是“ Menu Demo”
JMenuBarmb = new JMenuBar( );
// 创建菜单栏
frame.setJMenuBar(mb);
// 放到框架的上方
JMenuBar上也可以注册一些事件侦听程序,但通常情况下,对于JMenuBar上的用户事件,都不进行处理。
菜单的常用构造方法如下。
•JMenu( ):构造没有文本的新菜单。
•JMenu(String s):构造具有指定标签的新菜单,String 型参数s指定了菜单上的文本。
•JMenu(String s,boolean b):构造具有指定标签的新菜单,指示该菜单是否可以分离。
02 实例代码
实例代码如下
package com.pc.java;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class Subject implements ItemListener,ActionListener {
JFrame frame=new JFrame("Menu Demo");
JTextField tf=new JTextField();
public static void main(String args[])
{
Subject s=new Subject();
s.GoApp();
}
public void go()
{
JMenuBar menubar=new JMenuBar();
frame.setJMenuBar(menubar);
JMenu menu1=new JMenu("File");
JMenu menu2=new JMenu("Edit");
menubar.add(menu1);
menubar.add(menu2);
frame.setSize(300, 200);
frame.setVisible(true);
}
public void GoApp()
{
JMenuBar menubar=new JMenuBar();
frame.setJMenuBar(menubar);
JMenu menu,submenu;
JMenuItem menuItem;
menu=new JMenu("File");
menu.setMnemonic(KeyEvent.VK_E);
menubar.add(menu);
menuItem=new JMenuItem("Open...");
menuItem.setMnemonic(KeyEvent.VK_O);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1,ActionEvent.ALT_MASK));
menuItem.addActionListener((ActionListener)this);
menu.add(menuItem);
menuItem=new JMenuItem("Save",KeyEvent.VK_S);
menuItem.addActionListener(this);
menuItem.setEnabled(false);
menu.add(menuItem);
menuItem=new JMenuItem("Close");
menuItem.setMnemonic(KeyEvent.VK_C);
menuItem.addActionListener(this);
menu.add(menuItem);
menu.add(new JSeparator());
menuItem=new JMenuItem("Exit");
menuItem.setMnemonic(KeyEvent.VK_E);
menuItem.addActionListener(this);
menu.add(menuItem);
menu=new JMenu("Option");
menubar.add(menu);
menu.add("Font...");
submenu=new JMenu("Color...");
menu.add(submenu);
menuItem=new JMenuItem("Foreground");
menuItem.addActionListener(this);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2,ActionEvent.ALT_MASK));
submenu.add(menuItem);
menuItem=new JMenuItem("BackGround");
menuItem.addActionListener(this);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3,ActionEvent.ALT_MASK));
submenu.add(menuItem);
menu.addSeparator();
JCheckBoxMenuItem cm=new JCheckBoxMenuItem("Always on Top");
cm.addItemListener(this);
menu.addItemListener(this);
menu.add(cm);
menu.addSeparator();
JRadioButtonMenuItem rm=new JRadioButtonMenuItem("Small",true);
rm.addItemListener(this);
menu.add(rm);
ButtonGroup group=new ButtonGroup();
group.add(rm);
rm=new JRadioButtonMenuItem("Large");
rm.addItemListener(this);
menu.add(rm);
group.add(rm);
menu=new JMenu("Help");
menubar.add(menu);
menuItem=new JMenuItem("about...",new ImageIcon("dukeWaveRed.gif"));
menuItem.addActionListener(this);
menu.add(menuItem);
tf.setEditable(false);
Container cp=frame.getContentPane();
cp.add(tf,BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,200);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
int state=e.getStateChange();
JMenuItem amenuItem=(JMenuItem)e.getSource();
String command=amenuItem.getText();
if(state==ItemEvent.SELECTED)
{
tf.setText(command+"SELECTED");
}
else
{
tf.setText(command+"DESELECTED");
}
}
}
最终实现效果如下