Swing开发之JMenu篇

来源:互联网 发布:手机淘宝价格走势软件 编辑:程序博客网 时间:2024/06/06 16:31
Swing菜单和菜单项是按钮,因为JMenuItem扩展AbstractButton,JMenu扩展JMenuItem。因此,Swing菜单和菜单项继承了如下功能,即包含文本和(或)图标、显示光标进入时的图标和助记符等。
  JMenuItem和JMenu的父组件,它们最后都归于java.awt.Container,以强调菜单和菜单项都是容器。可以把任何类型的组件(从包含一个动画GIF的标签到JTree的一个实例)添加到一个菜单或菜单项中。
  菜单和菜单项还实现MenuElement接口,以便参与菜单事件的处理。
  工具条和弹出式菜单都扩展JComponent类,即任意组件都可以添加到一个工具条或弹出式菜单中。
  本章将介绍下面的组件:
  •JMenuItem
  •JCheckBoxMenuItem
  •JRadioButtonMenuItem
  •JMenu
  •JPopupMenu
  •JMenuBar

例子 1:在菜单中增加复选菜单
import java.awt.event.KeyEvent; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class JCheckBoxMenuItemDemo {   public static void main(final String args[]) {     JFrame frame = new JFrame("MenuSample Example");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     JMenuBar menuBar = new JMenuBar();     // File Menu, F - Mnemonic     JMenu fileMenu = new JMenu("File");     fileMenu.setMnemonic(KeyEvent.VK_F);     menuBar.add(fileMenu);     // File->New, N - Mnemonic     JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);     fileMenu.add(newMenuItem);     JCheckBoxMenuItem caseMenuItem = new JCheckBoxMenuItem("Case Sensitive");     caseMenuItem.setMnemonic(KeyEvent.VK_C);     fileMenu.add(caseMenuItem);         frame.setJMenuBar(menuBar);     frame.setSize(350, 250);     frame.setVisible(true);   } } 

例2:菜单事件处理
import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.AbstractButton; 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.JRadioButtonMenuItem; import javax.swing.JSeparator; import javax.swing.JTextField; public class SwingWinMenus extends JFrame {   public static int WIDTH = 300;   public static int HEIGHT = 300;   public static String TITLE = "SwingWin";   Container frameContainer;   JTextField textField = new JTextField(50);   JMenuBar menuBar = new JMenuBar();   JMenu fileMenu = new JMenu("File");   JMenuItem fileNew = new JMenuItem("New");   JMenuItem fileOpen = new JMenuItem("Open");   JMenuItem fileSave = new JMenuItem("Save");   JMenuItem fileExit = new JMenuItem("Exit");   JMenu editMenu = new JMenu("Edit");   JMenuItem editCut = new JMenuItem("Cut");   JMenuItem editCopy = new JMenuItem("Copy");   JMenuItem editPaste = new JMenuItem("Paste");   JMenu specialMenu = new JMenu("Special");   JCheckBoxMenuItem specialCheck1 = new JCheckBoxMenuItem("Check 1");   JCheckBoxMenuItem specialCheck2 = new JCheckBoxMenuItem("Check 2", true);   JSeparator separator = new JSeparator();   JRadioButtonMenuItem specialRadio1 = new JRadioButtonMenuItem("Radio 1");   JRadioButtonMenuItem specialRadio2 = new JRadioButtonMenuItem("Radio 2");   ButtonGroup buttonGroup = new ButtonGroup();   public SwingWinMenus() {     super("");     fileMenu.add(fileNew);     fileMenu.add(fileOpen);     fileMenu.add(fileSave);     fileMenu.add(fileExit);     editMenu.add(editCut);     editMenu.add(editCopy);     editMenu.add(editPaste);     specialMenu.add(specialCheck1);     specialMenu.add(specialCheck2);     specialMenu.add(separator);     buttonGroup.add(specialRadio1);     buttonGroup.add(specialRadio2);     specialMenu.add(specialRadio1);     specialMenu.add(specialRadio2);     menuBar.add(fileMenu);     menuBar.add(editMenu);     menuBar.add(specialMenu);     setJMenuBar(menuBar);     frameContainer = getContentPane();     frameContainer.setLayout(null);     textField.setBounds(100, 100, 100, 20);     frameContainer.add(textField);     setupEventHandlers();     setSize(450, 450);     setVisible(true);   }   void setupEventHandlers() {     addWindowListener(new WindowHandler());     fileNew.addActionListener(new MenuItemHandler());     fileOpen.addActionListener(new MenuItemHandler());     fileSave.addActionListener(new MenuItemHandler());     fileExit.addActionListener(new MenuItemHandler());     editCut.addActionListener(new MenuItemHandler());     editCopy.addActionListener(new MenuItemHandler());     editPaste.addActionListener(new MenuItemHandler());     specialCheck1.addItemListener(new ItemHandler());     specialCheck2.addItemListener(new ItemHandler());     specialRadio1.addItemListener(new ItemHandler());     specialRadio2.addItemListener(new ItemHandler());   }   public static void main(String[] args) {     SwingWinMenus app = new SwingWinMenus();   }   public class WindowHandler extends WindowAdapter {     public void windowClosing(WindowEvent e) {       System.exit(0);     }   }   public class MenuItemHandler implements ActionListener {     public void actionPerformed(ActionEvent e) {       String cmd = e.getActionCommand();       if (cmd.equals("Exit"))         System.exit(0);       else         textField.setText(cmd);     }   }   public class ItemHandler implements ItemListener {     public void itemStateChanged(ItemEvent e) {       AbstractButton button = (AbstractButton) e.getItem();       String label = button.getText();       if (button.isSelected())         label += " true";       else         label += " false";       textField.setText(label);     }   } } 

例3:弹出试菜单
import java.awt.Dimension; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; // Define PopupMenuListener class MyPopupMenuListener implements PopupMenuListener {   public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {     System.out.println("Canceled");   }   public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) {     System.out.println("Becoming Invisible");   }   public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {     System.out.println("Becoming Visible");   } } public class PopupMenuListenerDemo {   public static void main(final String args[]) {     JFrame frame = new JFrame("PopupSample Example");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // Create popup menu, attach popup menu listener     JPopupMenu popupMenu = new JPopupMenu("Title");     popupMenu.setSize(new Dimension(100,50));     PopupMenuListener popupMenuListener = new MyPopupMenuListener();     popupMenu.addPopupMenuListener(popupMenuListener);     // Cut     JMenuItem cutMenuItem = new JMenuItem("Cut");     popupMenu.add(cutMenuItem);     // Copy     JMenuItem copyMenuItem = new JMenuItem("Copy");     popupMenu.add(copyMenuItem);     // Paste     JMenuItem pasteMenuItem = new JMenuItem("Paste");     pasteMenuItem.setEnabled(false);     popupMenu.add(pasteMenuItem);     // Separator     popupMenu.addSeparator();     // Find     JMenuItem findMenuItem = new JMenuItem("Find");     popupMenu.add(findMenuItem);     JButton label = new JButton();     frame.add(label);     label.setComponentPopupMenu(popupMenu);     frame.setSize(350, 250);     frame.setVisible(true);   } } 

例 4:给菜单增加快捷方式
import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; public class JMenuItemKeyStroke {   public static void main(final String args[]) {     JFrame frame = new JFrame("MenuSample Example");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     JMenuBar menuBar = new JMenuBar();     // File Menu, F - Mnemonic     JMenu fileMenu = new JMenu("File");     fileMenu.setMnemonic(KeyEvent.VK_F);     menuBar.add(fileMenu);     // File->New, N - Mnemonic     JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);     fileMenu.add(newMenuItem);     // Edit->Cut, T - Mnemonic, CTRL-X - Accelerator     JMenuItem cutMenuItem = new JMenuItem("Cut", KeyEvent.VK_T);     KeyStroke ctrlXKeyStroke = KeyStroke.getKeyStroke("control X");     cutMenuItem.setAccelerator(ctrlXKeyStroke);     fileMenu.add(cutMenuItem);     frame.setJMenuBar(menuBar);     frame.setSize(350, 250);     frame.setVisible(true);   } }