Java进阶之菜单栏---JMenuBar

1.创建菜单栏步骤

(1):创建菜单栏对象 JMenuBar类
(2):创建菜单对象 JMenu类
(3):创建菜单项对象 JMenuItem类

2.优化菜单栏——与个性话菜单栏基本相似

快捷键、分割线、图标(详见下文)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;

//菜单栏---JMenuBar

public class JMenuBar_ps extends JFrame{
	final ButtonGroup butGroup = new ButtonGroup();
	
	public static void main(String[] args) {
		JMenuBar_ps frame = new JMenuBar_ps();
		frame.setVisible(true);
	}
	public JMenuBar_ps() {
		super();
		setTitle("桌面面板和内部窗体");
		setBounds(100,100,500,375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JMenuBar menuBar = new JMenuBar();//创建菜单栏对象
		setJMenuBar(menuBar);//给窗体添加菜单--注意:用的不是add
		
		JMenu menu1 = new JMenu("文件(F)");//创建菜单对象
		menu1.setMnemonic(KeyEvent.VK_F);//添加快捷键:F(按alt+F)
		menuBar.add(menu1);
		
		JMenuItem newMenu = new JMenuItem("新建");
		newMenu.addActionListener(new itemListener());//添加监听
		menu1.add(newMenu);
		
		JMenu openMenu = new JMenu("打开");//创建菜单对象---其里面还可以包含菜单项
		menu1.add(openMenu);
		
		JMenuItem openNewFile = new JMenuItem("打开新文件");
		JMenuItem openOldFile = new JMenuItem("打开旧文件");
		openOldFile.setEnabled(false);//设置菜单项禁用--显示但是不能点击
		openNewFile.addActionListener(new itemListener());//添加监听
		openMenu.add(openNewFile);
		openMenu.add(openOldFile);
		
		JMenuItem saveMenu = new JMenuItem("保存");
		saveMenu.addActionListener(new itemListener());//添加监听
		menu1.add(saveMenu);
		
		menu1.addSeparator();//添加分隔符
		
//menu1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,0));//B
//menu1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,KeyEvent.CTRL_DOWN_MASK));//CTRL+B
//menu1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,KeyEvent.CTRL_DOWN_MASK|KeyEvent.ALT_DOWN_MASK));//Alt+ctrl+B
		
		JMenuItem exitMenu = new JMenuItem("退出");
		exitMenu.addActionListener(new itemListener());//添加监听
		menu1.add(exitMenu);
		
		Icon icon = new ImageIcon("src/qq.png");
		newMenu.setIcon(icon);//添加图标
	}
	
	private class itemListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {//设置触发方法
			JMenuItem item = (JMenuItem)arg0.getSource();//事件.getSource()---通过事件返回一个动作触发的组件(强制转换)
			System.out.println("你单击的是的菜单项:"+item.getText());
		}
		
	}
}

3.添加弹出式菜单栏

对象创建JPopupMenu popup = new JPopupMenu();
添加时不能用add,要用

c.addMouseListener(new MouseAdapter() {//创建鼠标监听事件(与菜单栏的不同之处)----想让在哪里弹出菜单,就要在哪里添加鼠标监听
    @Override
	public void mouseReleased(MouseEvent e) {//按键被释放时所执行的方法
		if(e.isPopupTrigger()) {//判断此次事件是否为组件弹出菜单事件
			popup.show(e.getComponent(),e.getX(),e.getY());
   //show(e.getComponent(),e.getX(),e.getY())——(在哪个组件中显示,X和Y来确定显示的位置)
		}
	}
 });

4.定制个性化菜单

4.1使用分隔符和图标

menu.addSeparator();//添加分隔符

Icon icon = new ImageIcon("src/qq.png");
menu.setIcon(icon);//添加图标

4.2设置快捷键和加速键

4.2.1快捷键:展开菜单时,用于快速选中菜单

//设置快捷键--不区分大小写
menu1.setMnemonic(KeyEvent.VK_F);//添加快捷键:F
menu1.setMnemonic("F";//添加快捷键:F

4.2.1不展开菜单时,使用快捷键实现菜单功能

加速器中
ALT_DOWN_MASK = ALT_MASK
CTRL_DOWN_MASK = CTRL_MASK
SHIFT_DOWN_MASK = SHIFT_MASK
但是现在一般都是用前者,后者都不建议使用

menu1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,0));//B
menu1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,KeyEvent.CTRL_DOWN_MASK));//CTRL+B
menu1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,KeyEvent.CTRL_DOWN_MASK|KeyEvent.ALT_DOWN_MASK));//Alt+ctrl+B

4.3使用单选按钮和复选框

//使用复选框按钮菜单
		JCheckBoxMenuItem boldItem = new JCheckBoxMenuItem("加粗");
		JCheckBoxMenuItem italicItem = new JCheckBoxMenuItem("斜体");
		fontMenu.add(boldItem);
		fontMenu.add(italicItem);
//使用单选框按钮菜单	
		JRadioButtonMenuItem boldItem = new JRadioButtonMenuItem("加粗");
		JRadioButtonMenuItem italicItem = new JRadioButtonMenuItem("斜体");
		fontMenu.add(boldItem);
		fontMenu.add(italicItem);
		ButtonGroup group = new ButtonGroup();
		group.add(boldItem);
		group.add(italicItem);

4.4启用和禁用

一般的默认的都是启用的状态

menu.setEnabled(false);//设置菜单项禁用--显示但是不能点击——里面的布尔值决定是否被禁用
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

//弹出式菜单

public class JPopupMenu_ps extends JFrame{
	public static void main(String[] args) {
		JPopupMenu_ps frame = new JPopupMenu_ps();
		frame.setVisible(true);
	}
	public JPopupMenu_ps() {
		super();
		setTitle("桌面面板和内部窗体");
		setBounds(100,100,500,375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c = getContentPane();//获取窗体容器
		final JLabel label = new JLabel();
		label.setText("         请在窗口中单击鼠标右键!");
		c.add(label,BorderLayout.CENTER);
		
		JPopupMenu popup = new JPopupMenu();//创建弹出式菜单对象
		
		JMenuItem cutItem = new JMenuItem("剪切");//创建弹出式菜单项
		cutItem.addActionListener(new itemListener());//添加监听
		popup.add(cutItem);
		
		JMenuItem copyItem = new JMenuItem("复制");//创建弹出式菜单项
		copyItem.addActionListener(new itemListener());//添加监听
		popup.add(copyItem);
		
		JMenuItem pastItem = new JMenuItem("粘贴");//创建弹出式菜单项
		popup.add(pastItem);
		
		JMenu editMenu = new JMenu("编辑");
		popup.add(editMenu);
		JMenu fontMenu = new JMenu("字体");
		editMenu.add(fontMenu);
		
		JMenuItem boldItem = new JMenuItem("加粗");
		JMenuItem italicItem = new JMenuItem("斜体");
		boldItem.addActionListener(new itemListener());//添加监听
		italicItem.addActionListener(new itemListener());//添加监听
		fontMenu.add(boldItem);
		fontMenu.add(italicItem);
		
//使用复选框按钮菜单
//		JCheckBoxMenuItem boldItem = new JCheckBoxMenuItem("加粗");
//		JCheckBoxMenuItem italicItem = new JCheckBoxMenuItem("斜体");
//		fontMenu.add(boldItem);
//		fontMenu.add(italicItem);
//使用单选框按钮菜单	
//		JRadioButtonMenuItem boldItem = new JRadioButtonMenuItem("加粗");
//		JRadioButtonMenuItem italicItem = new JRadioButtonMenuItem("斜体");
//		fontMenu.add(boldItem);
//		fontMenu.add(italicItem);
//		ButtonGroup group = new ButtonGroup();
//		group.add(boldItem);
//		group.add(italicItem);
	
		c.addMouseListener(new MouseAdapter() {//创建鼠标监听事件(与菜单栏的不同之处)----想让在哪里弹出菜单,就要在哪里添加鼠标监听
			@Override
			public void mouseReleased(MouseEvent e) {//按键被释放时所执行的方法
				if(e.isPopupTrigger()) {//判断此次事件是否为组件弹出菜单事件
					popup.show(e.getComponent(),e.getX(),e.getY());
				}
			}
		});
		
	}
	
	class itemListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {//设置触发方法
			JMenuItem item = (JMenuItem)arg0.getSource();//事件.getSource()---通过事件返回一个动作触发的组件(强制转换)
			System.out.println("你单击的是的菜单项:"+item.getText());
		}
	}
}

你可能感兴趣的:(java,菜单栏,JMenuBar,java)