菜单

菜单栏(JMenuBar)

在介绍JMenu组件前,我们先介绍JMenuBar组件,JMenuBar组件的功能是用来摆入JMenu组件.当我们建立完许多的JMenu组件后, 需要通过JMenuBar组件来将JMenu组件加入到窗口中.虽然我们由下表中看出JMenuBar组件只有一种构造方式,但是它对于构造一个菜 单来说是个不可缺少的组件.

JMenuBar构造函数:

JMenuBar():建立一个新的JMenuBar; 由于构造一个空的JMenuBar然后设置到窗口上对于窗口来说是没有意义的,因此JMenuBar需要结合至少一个以上的JMenu组件才 会在画面上显现出视觉的效果,所以JMenuBar的构造方法及范例我们留到JMenu的第一个范例中再加以说明.

菜单(JMenu)

JMenu组件是用来存放和整合JMenuItem的组件,这个组件也是在构成一个菜单中不可或缺的组件之一.JMenu可以是单一层次的结 构也可以是一个层次式的结构,要使用何种形式的结构取决于界面设计上的需要而定,如下表所示:

JMenu构造函数:

JMenu():建立一个新的JMenu.
JMenu(Action a):建立一个支持Action的新的JMenu.
JMenu(String s):以指定的字符串名称建立一个新的JMenu.
JMenu(String,Boolean b):以指定的字符串名称建立一个新的JMenu并决定这个菜单是否可以下拉式的属性.

JMenu类的常用方法如下:

public Component add (Component c): 添加指定组件到该菜单的尾部

public Component add (Component c,int dex): 添加指定组件到该菜单的指定索引位置上

public void addSeparator():添加分隔符到菜单的末尾

public JMenuItem getItem(int pos) :获取指定位置的菜单项

public int getItemCount() : 获取菜单上的项数,包括菜单项和分隔符

public void insert(String s,int pos) :添加指定文本的菜单项到指定位置

public JMenuItem insert(JMenuItem m,int pos) : 添加指定的菜单项到指定位置

public void insertSeparator(int index) : 添加分隔符到指定位置

public void remove(int pos) : 从该菜单删除指定索引处的菜单项

public void remove(JMenuItem item) :从该菜单中删除指定的菜单项

public void removeAll(): 从该菜单中删除指定的菜单项

菜单项(JMenuItem)

JMenuItem继承AbstractButton类,因此JMenuItem具有许多AbstractButton的特性,也可以说JMenuItem是一种特殊的Button,所 以JMenuItem支持许多在Button中好用的功能,例如加入图标文件或是当我们在菜单中选择某一项JMenuItem时就如同按下按钮的操作 一样触发ActionEvent,通过ActionEvent的机制我们就能针对不同的JMenuItem编写其对应的程序区段,我们来看看JMenuItem的构造 方式有哪些:

JMenuItem构造函数:

JMenuItem():建立一个新的JMenuItem.
JMenuItem(Action a):建立一个支持Action的新的JMenuItem.
JMenuItem(Icon icon):建立一个有图标的JMenuItem.
JMenuItem(String text):建立一个有文字的JMenuItem.
JMenuItem(String text,Icon icon):建立一个有图标和文字的JMenuItem.
JMenuItem(String text,int mnemonic):建立一个有文字和键盘设置快捷键的JMenuItem.

package ch10;

import java.awt.event.*;

import javax.swing.*;

public class MenuTest extends JFrame implements ActionListener,ItemListener
{
    private JMenu[] menu = {new JMenu("文件"), new JMenu("设置"),new JMenu("字体") };
    JMenuItem open = new JMenuItem("打开");
    JMenuItem save = new JMenuItem("保存");
    JMenuItem saveas = new JMenuItem("另存为");
    JMenuItem exit = new JMenuItem("退出");
    private JMenuItem[] jmenuitem = {open,save,saveas, exit};
    private JRadioButtonMenuItem [] radioButton = new JRadioButtonMenuItem[]{new JRadioButtonMenuItem("自动换行",true),new JRadioButtonMenuItem("不换行")};
    private ButtonGroup buttongroup = new ButtonGroup();
    private JCheckBoxMenuItem [] checkBox = new JCheckBoxMenuItem[]{new JCheckBoxMenuItem("粗体"),new JCheckBoxMenuItem("宋体"),new JCheckBoxMenuItem("斜体")};
    private JMenuBar menubar = new JMenuBar();   //创建菜单栏对象
    private JTextArea textarea = new JTextArea();  //创建文本区对象
    private JScrollPane jscrollpane = new JScrollPane(textarea);
    public MenuTest ()
    {
    	menubar.add(menu[0]);
    	menubar.add(menu[1]);
    	for(int i=0;i<jmenuitem.length;i++)
    	{
    		menu[0].add(jmenuitem[i]);
    		jmenuitem[i].addActionListener(this);
    	}
    	for(int i=0;i<radioButton.length;i++)
    	{
    		menu[1].add(radioButton[i]);
    		radioButton[i].addItemListener(this);
    		buttongroup.add(radioButton[i]);
    	}
    	menu[1].addSeparator();   //添加分割线到“设置”菜单
    	menu[1].add(menu[2]);
    	for(int i=0;i<checkBox.length;i++)
    	{
    		menu[2].add(checkBox[i]);
    		checkBox[i].addItemListener(this);
    	}
    	this.setJMenuBar(menubar);
    	this.setBounds(200,200,300,200);
    	this.setVisible(true);
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
    	this.setTitle("菜单小测试");
    	this.add(jscrollpane);
    }
    String newline = "\n";
    public void actionPerformed(ActionEvent a)
    {
    	JMenuItem source  = (JMenuItem)(a.getSource());
    	String s = "监测事件。"+newline+"事件源:"+source.getText()+"(选择对象"+getClassName(source)+")";
    	textarea.append(s+newline);
    }
	public void itemStateChanged(ItemEvent a)
	{
		JMenuItem source = (JMenuItem)(a.getSource());
		String s = "菜单监听"+newline+"事件源:"+source.getText()+"(选择对象"+getClassName(source)+")"+newline+"新的状态:"+((a.getStateChange()==ItemEvent.SELECTED)?"选择":"不选择");
		textarea.append(s+newline);
	}
	protected String getClassName(Object o)
	{
		String classString = o.getClass().getName();
		int dotIndex = classString.lastIndexOf(".");
		return classString.substring(dotIndex+1);
	}
	public static void main(String args[])
	{
		new MenuTest();
	}
}

菜单_第1张图片



你可能感兴趣的:(菜单)