位于窗门顶部的菜单栏(menu bar)包括了下拉菜单的名字。点击一个名字就可以打开包含菜单项(menu items)和子菜单(submenus)的菜电。当用户点击菜单项时,所有的菜单 部会被关闭并且将“条消息发送给程序显示一个带子菜单的典型菜单。
程序代码:
import com.sun.deploy.association.*;
import javax.swing.*;
import javax.swing.Action;
import javax.swing.text.TextAction;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* Created by IBM on 2017/9/22.
*/
public class MenuFrame extends JFrame {
private static final int DEFAULT_WIDTH=300;
private static final int DEFAULT_HEIGHT=200;
private Action saveAction;
private Action saveAsAction;
private JCheckBoxMenuItem readonLyItem;
private JPopupMenu popup;
public static void main(String[]args){
MenuFrame buttonFrame=new MenuFrame();
buttonFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buttonFrame.setVisible(true);
}
class TestAction extends AbstractAction{
public TestAction(String name){
super(name);
}
public void actionPerformed(ActionEvent event){
System.out.println(getValue(Action.NAME)+"selected");
}
}
public MenuFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
JMenu fileMenu=new JMenu("File");
fileMenu.add(new TestAction("New"));
JMenuItem openItem=fileMenu.add(new TestAction("Open"));
openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl 0"));//设置快捷键
fileMenu.addSeparator();
saveAction=new TestAction("Save");
JMenuItem saveItem=fileMenu.add(saveAction);
saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl 1"));
saveAsAction=new TestAction("Save");
JMenuItem saveAsItem=fileMenu.add(saveAsAction);
saveAsItem.setAccelerator(KeyStroke.getKeyStroke("ctrl 2"));
fileMenu.addSeparator();
fileMenu.add(new AbstractAction("Exit") {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
readonLyItem=new JCheckBoxMenuItem("Read-only");
readonLyItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean saveOk=!readonLyItem.isSelected();
saveAction.setEnabled(saveOk);
saveAsAction.setEnabled(saveOk);
}
});
ButtonGroup group=new ButtonGroup();
JRadioButtonMenuItem insertItem=new JRadioButtonMenuItem("Insert");//单选按钮组
insertItem.setSelected(true);
JRadioButtonMenuItem overTypeItem=new JRadioButtonMenuItem("Overtype");//单选按钮组
group.add(insertItem);
group.add(overTypeItem);
Action cutAction=new TestAction("Cut");
cutAction.putValue(Action.SMALL_ICON,new ImageIcon("layers.png"));
Action copyAction=new TestAction("Copy");
copyAction.putValue(Action.SMALL_ICON,new ImageIcon("layers.png"));
Action pasteAction=new TestAction("Paste");
pasteAction.putValue(Action.SMALL_ICON,new ImageIcon("layers.png"));
JMenu editMenu=new JMenu("Edit");
editMenu.add(cutAction);
editMenu.add(copyAction);
editMenu.add(pasteAction);
//
JMenu optionMenu=new JMenu("Options");
optionMenu.add(readonLyItem);
optionMenu.addSeparator();
optionMenu.add(insertItem);
optionMenu.add(overTypeItem);
editMenu.addSeparator();
editMenu.add(optionMenu);
//
JMenu helpMenu=new JMenu("help");
helpMenu.setMnemonic('H');
JMenuItem indexItem=new JMenuItem("Index");
indexItem.setMnemonic('I');
helpMenu.add(indexItem);
//
Action aboutAction=new TestAction("About");
// aboutAction.putValue(Action.MNEMONIC_KEY,new Integer("A"));
helpMenu.add(aboutAction);
JMenuBar menuBar=new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(helpMenu);
//
popup=new JPopupMenu();
popup.add(cutAction);
popup.add(copyAction);
popup.add(pasteAction);
popup.add(optionMenu);
JPanel panel=new JPanel();
panel.setComponentPopupMenu(popup);
add(panel);
//
panel.addMouseMotionListener(new MouseAdapter() {});
}
}
运行结果: