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();//添加分隔符
//((KeyEvent.VK_B,0));//B
//((KeyEvent.VK_B,KeyEvent.CTRL_DOWN_MASK));//CTRL+B
//((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/");
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((),(),())——(在哪个组件中显示,X和Y来确定显示的位置)
}
}
});
4.定制个性化菜单
4.1使用分隔符和图标
menu.addSeparator();//添加分隔符
Icon icon = new ImageIcon("src/");
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("斜体");
// (boldItem);
// (italicItem);
//使用单选框按钮菜单
// JRadioButtonMenuItem boldItem = new JRadioButtonMenuItem("加粗");
// JRadioButtonMenuItem italicItem = new JRadioButtonMenuItem("斜体");
// (boldItem);
// (italicItem);
// ButtonGroup group = new ButtonGroup();
// (boldItem);
// (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());
}
}
}