Mercurial > hg > jslab
diff examples/gui/swing/MenuDemo.java @ 1:5df24c91468d
Oh my what a mess.
author | samer |
---|---|
date | Fri, 05 Apr 2019 16:26:00 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/gui/swing/MenuDemo.java Fri Apr 05 16:26:00 2019 +0100 @@ -0,0 +1,164 @@ +import java.awt.*; +import java.awt.event.*; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.ButtonGroup; +import javax.swing.JMenuBar; +import javax.swing.KeyStroke; +import javax.swing.ImageIcon; + +import javax.swing.JTextArea; +import javax.swing.JScrollPane; +import javax.swing.JFrame; + +/* + * This class adds event handling to MenuLookDemo. + */ +public class MenuDemo extends JFrame + implements ActionListener, ItemListener { + JTextArea output; + JScrollPane scrollPane; + String newline = "\n"; + + public MenuDemo() { + JMenuBar menuBar; + JMenu menu, submenu; + JMenuItem menuItem; + JRadioButtonMenuItem rbMenuItem; + JCheckBoxMenuItem cbMenuItem; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + + //Add regular components to the window, using the default BorderLayout. + Container contentPane = getContentPane(); + output = new JTextArea(5, 30); + output.setEditable(false); + scrollPane = new JScrollPane(output); + contentPane.add(scrollPane, BorderLayout.CENTER); + + //Create the menu bar. + menuBar = new JMenuBar(); + setJMenuBar(menuBar); + + //Build the first menu. + menu = new JMenu("A Menu"); + menu.setMnemonic(KeyEvent.VK_A); + menu.getAccessibleContext().setAccessibleDescription( + "The only menu in this program that has menu items"); + menuBar.add(menu); + + //a group of JMenuItems + menuItem = new JMenuItem("A text-only menu item", + KeyEvent.VK_T); + //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead + menuItem.setAccelerator(KeyStroke.getKeyStroke( + KeyEvent.VK_1, ActionEvent.ALT_MASK)); + menuItem.getAccessibleContext().setAccessibleDescription( + "This doesn't really do anything"); + menuItem.addActionListener(this); + menu.add(menuItem); + + menuItem = new JMenuItem("Both text and icon", + new ImageIcon("images/middle.gif")); + menuItem.setMnemonic(KeyEvent.VK_B); + menuItem.addActionListener(this); + menu.add(menuItem); + + menuItem = new JMenuItem(new ImageIcon("images/middle.gif")); + menuItem.setMnemonic(KeyEvent.VK_D); + menuItem.addActionListener(this); + menu.add(menuItem); + + //a group of radio button menu items + menu.addSeparator(); + ButtonGroup group = new ButtonGroup(); + rbMenuItem = new JRadioButtonMenuItem("A radio button menu item"); + rbMenuItem.setSelected(true); + rbMenuItem.setMnemonic(KeyEvent.VK_R); + group.add(rbMenuItem); + rbMenuItem.addActionListener(this); + menu.add(rbMenuItem); + rbMenuItem = new JRadioButtonMenuItem("Another one"); + rbMenuItem.setMnemonic(KeyEvent.VK_O); + group.add(rbMenuItem); + rbMenuItem.addActionListener(this); + menu.add(rbMenuItem); + + //a group of check box menu items + menu.addSeparator(); + cbMenuItem = new JCheckBoxMenuItem("A check box menu item"); + cbMenuItem.setMnemonic(KeyEvent.VK_C); + cbMenuItem.addItemListener(this); + menu.add(cbMenuItem); + cbMenuItem = new JCheckBoxMenuItem("Another one"); + cbMenuItem.setMnemonic(KeyEvent.VK_H); + cbMenuItem.addItemListener(this); + menu.add(cbMenuItem); + + //a submenu + menu.addSeparator(); + submenu = new JMenu("A submenu"); + submenu.setMnemonic(KeyEvent.VK_S); + + menuItem = new JMenuItem("An item in the submenu"); + menuItem.setAccelerator(KeyStroke.getKeyStroke( + KeyEvent.VK_2, ActionEvent.ALT_MASK)); + menuItem.addActionListener(this); + submenu.add(menuItem); + + menuItem = new JMenuItem("Another item"); + menuItem.addActionListener(this); + submenu.add(menuItem); + menu.add(submenu); + + //Build second menu in the menu bar. + menu = new JMenu("Another Menu"); + menu.setMnemonic(KeyEvent.VK_N); + menu.getAccessibleContext().setAccessibleDescription( + "This menu does nothing"); + menuBar.add(menu); + } + + public void actionPerformed(ActionEvent e) { + JMenuItem source = (JMenuItem)(e.getSource()); + String s = "Action event detected." + + newline + + " Event source: " + source.getText() + + " (an instance of " + getClassName(source) + ")"; + output.append(s + newline); + } + + public void itemStateChanged(ItemEvent e) { + JMenuItem source = (JMenuItem)(e.getSource()); + String s = "Item event detected." + + newline + + " Event source: " + source.getText() + + " (an instance of " + getClassName(source) + ")" + + newline + + " New state: " + + ((e.getStateChange() == ItemEvent.SELECTED) ? + "selected":"unselected"); + output.append(s + newline); + } + + // Returns just the class name -- no package info. + protected String getClassName(Object o) { + String classString = o.getClass().getName(); + int dotIndex = classString.lastIndexOf("."); + return classString.substring(dotIndex+1); + } + + public static void main(String[] args) { + MenuDemo window = new MenuDemo(); + + window.setTitle("MenuDemo"); + window.setSize(450, 260); + window.setVisible(true); + } +}