Java Tutorial/Swing/JMenuItem

Материал из Java эксперт
Перейти к: навигация, поиск

Adding Drop-Down Menus

   <source lang="java">

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; public class AddingDropDownMenus extends JFrame {

 private JMenuBar menuBar = new JMenuBar(); // Window menu bar
 private JMenuItem newItem, openItem, closeItem, saveItem, saveAsItem, printItem;
 private JRadioButtonMenuItem lineItem, rectangleItem, circleItem;
 private JCheckBoxMenuItem redItem, yellowItem;
 public AddingDropDownMenus() {
   setDefaultCloseOperation(EXIT_ON_CLOSE);
   setJMenuBar(menuBar);
   JMenu fileMenu = new JMenu("File");
   JMenu elementMenu = new JMenu("Elements");
   newItem = fileMenu.add("New");
   openItem = fileMenu.add("Open");
   closeItem = fileMenu.add("Close");
   fileMenu.addSeparator();
   saveItem = fileMenu.add("Save");
   saveAsItem = fileMenu.add("Save As...");
   fileMenu.addSeparator();
   printItem = fileMenu.add("Print");
   elementMenu.add(lineItem = new JRadioButtonMenuItem("Line", true));
   elementMenu.add(rectangleItem = new JRadioButtonMenuItem("Rectangle", false));
   elementMenu.add(circleItem = new JRadioButtonMenuItem("Circle", false));
   ButtonGroup types = new ButtonGroup();
   types.add(lineItem);
   types.add(rectangleItem);
   types.add(circleItem);
   elementMenu.addSeparator();
   elementMenu.add(redItem = new JCheckBoxMenuItem("Red", false));
   elementMenu.add(yellowItem = new JCheckBoxMenuItem("Yellow", false));
   menuBar.add(fileMenu); 
   menuBar.add(elementMenu);
 }
 public static void main(String[] a) {
   AddingDropDownMenus window = new AddingDropDownMenus(); 
   window.setBounds(30, 30, 300, 300); // Size
   window.setVisible(true);
 }

}</source>





Adding Mnemonic and Accelerator to Menuitem

A menu accelerator activates a menu item when it is not visible.



   <source lang="java">

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);
 }

}</source>





Creating a Menu Item That Listens for Changes to Its Selection Status

   <source lang="java">

import javax.swing.JMenuItem; public class Main {

 public static void main(String[] argv) throws Exception {
   JMenuItem item = new JMenuItem("Label") {
     public void menuSelectionChanged(boolean isSelected) {
       super.menuSelectionChanged(isSelected);
       if (isSelected) {
         System.out.println("The menu item is selected"); 
       } else {
         System.out.println("The menu item is no longer selected"); 
       }
     }
   };
 }

}</source>





Creating an About Menu Item

   <source lang="java">

import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class FramewithAboutMenu extends JFrame {

 public FramewithAboutMenu(String title) {
   JMenuBar menuBar = new JMenuBar();
   setTitle(title);
   setJMenuBar(menuBar);
   setDefaultCloseOperation(EXIT_ON_CLOSE);
   JMenu fileMenu = new JMenu("File");
   JMenu elementMenu = new JMenu("Elements");
   JMenu helpMenu = new JMenu("Help");
   fileMenu.setMnemonic("F");
   elementMenu.setMnemonic("E");
   helpMenu.setMnemonic("H");
   JMenuItem aboutItem = new JMenuItem("About");
   helpMenu.add(aboutItem);
   menuBar.add(helpMenu);
 }
 public static void main(String[] a) {
   FramewithAboutMenu window = new FramewithAboutMenu("Sketcher");
   window.setBounds(30, 30, 300, 300);
   window.setVisible(true);
 }

}</source>





Creating JMenuItem Components

   <source lang="java">

public JMenuItem() JMenuItem jMenuItem = new JMenuItem(); public JMenuItem(Icon icon) Icon atIcon = new ImageIcon("at.gif"); JMenuItem jMenuItem = new JMenuItem(atIcon); public JMenuItem(String text) JMenuItem jMenuItem = new JMenuItem("Cut"); public JMenuItem(String text, Icon icon) Icon atIcon = new ImageIcon("at.gif"); JMenuItem jMenuItem = new JMenuItem("Options", atIcon); public JMenuItem(String text, int mnemonic) JMenuItem jMenuItem = new JMenuItem("Cut", KeyEvent.VK_T); public JMenuItem(Action action) Action action = ...; JMenuItem jMenuItem = new JMenuItem(action);</source>





Creating Menuitem from Action class

The mnemonic for a menu item usually appears underlined within the text label for the menu



   <source lang="java">

class ShowAction extends AbstractAction {

 Component parentComponent;
 public ShowAction(Component parentComponent) {
   super("About");
   putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_A));
   this.parentComponent = parentComponent;
 }
 public void actionPerformed(ActionEvent actionEvent) {
       JOptionPane.showMessageDialog(parentComponent, "About Swing", "About Box V2.0",
           JOptionPane.INFORMATION_MESSAGE);
 }

} public class ContructMenuWithAction {

 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 ShowAction(frame));
   fileMenu.add(newMenuItem);
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>





Customizing JMenuItem Look and Feel

Property StringObject TypeMenuItem.acceleratorDelimiterStringMenuItem.acceleratorFontFontMenuItem.acceleratorForegroundColorMenuItem.acceleratorSelectionForegroundColorMenuItem.actionMapActionMapMenuItem.arrowIconIconMenuItem.backgroundColorMenuItem.borderBorderMenuItem.borderPaintedBooleanMenuItem.checkIconIconMenuItem.rumandSoundStringMenuItem.disabledForegroundColorMenuItem.fontFontMenuItem.foregroundColorMenuItem.marginInsetsMenuItem.opaqueBooleanMenuItem.selectionBackgroundColorMenuItem.selectionForegroundColorMenuItem.textIconGapIntegerMenuItemUIString


Disable Menuitem

   <source lang="java">

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 JMenuItemDisabled {

 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->Paste, P - Mnemonic, CTRL-V - Accelerator, Disabled
   JMenuItem pasteMenuItem = new JMenuItem("Paste", KeyEvent.VK_P);
   KeyStroke ctrlVKeyStroke = KeyStroke.getKeyStroke("control V");
   pasteMenuItem.setAccelerator(ctrlVKeyStroke);
   pasteMenuItem.setEnabled(false);
   fileMenu.add(pasteMenuItem);
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>





Listening to JMenuItem Events with a MenuDragMouseListener

   <source lang="java">

import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.event.MenuDragMouseEvent; import javax.swing.event.MenuDragMouseListener; public class ContructMenuMenuDragMouseListener {

 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("asdf");
   fileMenu.add(newMenuItem);
   
   newMenuItem.addMenuDragMouseListener(new MenuDragMouseListener(){
     public void menuDragMouseEntered(MenuDragMouseEvent e) {
       System.out.println("menuDragMouseEntered");        
     }
     public void menuDragMouseExited(MenuDragMouseEvent e) {
      System.out.println("menuDragMouseExited");
       
     }
     public void menuDragMouseDragged(MenuDragMouseEvent e) {
       System.out.println("menuDragMouseDragged");
       
     }
     public void menuDragMouseReleased(MenuDragMouseEvent e) {
       System.out.println("menuDragMouseReleased");
       
     }});
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>





Listening to JMenuItem Events with a MenuKeyListener

   <source lang="java">

import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.event.MenuKeyEvent; import javax.swing.event.MenuKeyListener; public class ContructMenuMenuKeyListener {

 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("asdf");
   fileMenu.add(newMenuItem);
   
   newMenuItem.addMenuKeyListener(new MenuKeyListener(){
     public void menuKeyTyped(MenuKeyEvent e) {
      System.out.println("KeyTyped");
     }
     public void menuKeyPressed(MenuKeyEvent e) {
       System.out.println("KeyPressed");
     }
     public void menuKeyReleased(MenuKeyEvent e) {
       System.out.println("KeyReleased");
     }});
   
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>





Listening to JMenuItem Events with an ActionListener

   <source lang="java">

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; class MenuActionListener implements ActionListener {

 public void actionPerformed(ActionEvent e) {
   System.out.println("Selected: " + e.getActionCommand());
 }

} public class ContructMenuActionListener {

 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");
   newMenuItem.addActionListener(new MenuActionListener());
   fileMenu.add(newMenuItem);
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>





Separating Menu Items in a Menu

   <source lang="java">

import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JSeparator; public class Main {

 public static void main(String[] argv) throws Exception {
   JMenu menu = new JMenu("Menu Label");
   JMenuItem item1 = new JMenuItem("Item Label");
   menu.add(item1);
   // Add separator
   menu.add(new JSeparator());
   // Add another menu item
   JMenuItem item2 = new JMenuItem("Item Label");
   menu.add(item2);
 }

}</source>





Using Function key as Accelerator

   <source lang="java">

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 JMenuItemAccelerator {

 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->Find, F - Mnemonic, F3 - Accelerator
   JMenuItem findMenuItem = new JMenuItem("Find", KeyEvent.VK_F);
   KeyStroke f3KeyStroke = KeyStroke.getKeyStroke("F3");
   findMenuItem.setAccelerator(f3KeyStroke);
   fileMenu.add(findMenuItem);
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>