日期:2014-05-20 浏览次数:20780 次
import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JRadioButtonMenuItem; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.KeyStroke; public class MenuUseDemo extends JFrame { public static final int WIDTH = 250; public static final int HEIGHT = 200; private JMenuItem newItem; private JMenuItem openItem; private JMenuItem closeItem; private JMenuItem saveItem; private JMenuItem cutItem; private JMenuItem copyItem; private JMenuItem pasteItem; private JMenuItem cutItemPop; private JMenuItem copyItemPop; private JMenuItem pasteItemPop; private JRadioButtonMenuItem forwardItem; private JRadioButtonMenuItem backwardItem; private JPopupMenu popup; private JTextField myTextField; public MenuUseDemo() { setTitle("MenuUseDemo"); setSize(WIDTH, HEIGHT); Container contentPane = getContentPane(); JPanel textPanel = new JPanel(); // 创建显示菜单操作的文本区 myTextField = new JTextField("", 20); textPanel.add(myTextField); contentPane.add(textPanel); // 创建菜单栏,并将菜单栏加入到框架中 JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); // 创建菜单及菜单项,并添加快捷键和加速器 // “File”菜单 JMenu fileMenu = new JMenu("File"); // 设置菜单的快捷键 fileMenu.setMnemonic('F'); // 新建“New”菜单项,并添加共用的事件监听器 newItem = fileMenu.add(new ShowAction("New")); // 设置菜单项的加速器 newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); // 新建“Open”菜单项和监听器 openItem = fileMenu.add(new ShowAction("Open")); openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); // 增加分隔线 fileMenu.addSeparator(); // 新建“Save”菜单项和监听器 saveItem = fileMenu.add(new ShowAction("Save")); saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); // 初始设置“Save”菜单项为禁用状态 saveItem.setEnabled(false); // 新建“Close”菜单项和监听器 closeItem = fileMenu.add(new ShowAction("Close")); closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK)); closeItem.setEnabled(false); fileMenu.addSeparator(); // 新建“Exit”菜单项和监听器 JMenuItem exitItem = new JMenuItem("Exit", 'T'); exitItem.addActionListener(new AbstractAction("Exit") { public void actionPerformed(ActionEvent event) { System.exit(0); } }); exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_MASK)); fileMenu.add(exitItem); // “Edit”菜单 JMenu editMenu = new JMenu("Edit"); // 设置菜单的快捷键 editMenu.setMnemonic('E'); // 新建“Cut”菜单项和监听器 cutItem = new JMenuItem("Cut", 'C'); editMenu.add(cutItem); // 添加事件监听器 cutItem.addActionListener(new ShowAction("Cut")); cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK)); cutItem.setEnabled(false); // 新建“Copy”菜单项和监听器 copyItem = new JMenuItem("Copy", 'Y'); copyItem.addActionListener(new ShowAction("Copy")); copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_MASK)); copyItem.setEnabled(false); // 新建“Paste”菜单项和监听器 pasteItem = new JMenuItem("Paste", 'P'); pasteItem.addActionListener(new ShowAction("Paste")); pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK)); pasteItem.setEnabled(false); editMenu.add(copyItem); editMenu.add(pasteItem); // “Search”菜单 JMenu searchMenu = new JMenu("Search"); searchMenu.setMnemonic('S'); // 创建单选按钮菜单项“Forward”和“Backward” ButtonGroup group = new ButtonGroup(); forwardItem = new JRadioButtonMenuItem("Forward"); forwardItem.addActionListener(new ShowAction("Forward")); forwardItem.setSelected(true); forwardItem.setEnabled(false); backwardItem = new JRadioButtonMenuItem("Backward"); backwardItem.addActionListener(new ShowAction("Backward")); backwardItem.setEnabled(false); group.add(forwardItem); group.add(backwardItem); searchMenu.add(forwardItem); searchMenu.add(backwardItem); // "View"菜单 JMenu viewMenu = new JMenu("View"); viewMenu.setMnemonic('V'); // 创建子菜单 JMenu optionMenu = new JMenu("Option"); optionMenu.setMnemonic('O'); // 创建复选框菜单项“ToolBar”和“Status” JCheckBoxMenuItem toolItem = new JCheckBoxMenuItem("ToolBar"); JCheckBoxMenuItem statusItem = new JCheckBoxMenuItem("Status"); toolItem.addActionListener(new ShowAction("ToolBar")); statusItem.addActionListener(new ShowAction("Status")); // 将菜单项添加到子菜单中 optionMenu.add(toolItem); optionMenu.add(statusItem); // 将子菜单添加到“View”菜单中 viewMenu.add(optionMenu); // 将菜单加入到菜单栏中 menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(searchMenu); menuBar.add(viewMenu); // 弹出式菜单 popup = new JPopupMenu(); // 新建弹出式菜单中的“Cut”菜单项和监听器 cutItemPop = new JMenuItem("Cut", 'C'); cutItemPop.addActionListener(new ShowAction("CutPop")); cutItemPop.setEnabled(false); // 新建弹出式菜单中的“Copy”菜单项和监听器 copyItemPop = new JMenuItem("Copy", 'Y'); copyItemPop.addActionListener(new ShowAction("CopyPop")); copyItemPop.setEnabled(false); // 新建弹出式菜单中的“Paste”菜单项和监听器 pasteItemPop = new JMenuItem("Paste", 'P'); pasteItemPop.addActionListener(new ShowAction("PastePop")); pasteItemPop.setEnabled(false); popup.add(cutItemPop); popup.add(copyItemPop); popup.add(pasteItemPop); // 实现弹出式菜单的弹出触发器 getContentPane().addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent event) { if (event.isPopupTrigger()) // 指定弹出式菜单的父组件以及显示位置 popup .show(event.getComponent(), event.getX(), event .getY()); } }); } // 菜单项的共用事件监听器 private class ShowAction extends AbstractAction { public ShowAction(String name) { super(name); } public void actionPerformed(ActionEvent event) { // 实现菜单项的启用和禁用控制 if (event.getSource() == newItem || event.getSource() == openItem) { saveItem.setEnabled(true); closeItem.setEnabled(true); cutItem.setEnabled(true); copyItem.setEnabled(true); pasteItem.setEnabled(true); forwardItem.setEnabled(true); backwardItem.setEnabled(true); cutItemPop.setEnabled(true); copyItemPop.setEnabled(true); pasteItemPop.setEnabled(true); } if (event.getSource() == closeItem) { saveItem.setEnabled(false); closeItem.setEnabled(false); cutItem.setEnabled(false); copyItem.setEnabled(false); pasteItem.setEnabled(false); forwardItem.setEnabled(false); backwardItem.setEnabled(false); cutItemPop.setEnabled(false); copyItemPop.setEnabled(false); pasteItemPop.setEnabled(false); } // 在文本域中显示菜单选择结果 myTextField.setText(getValue(Action.NAME) + " selected."); } } public static void main(String[] args) { MenuUseDemo frame = new MenuUseDemo(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }