Project received
This commit is contained in:
234
src/MenuDemo.java
Normal file
234
src/MenuDemo.java
Normal file
@@ -0,0 +1,234 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle or the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
|
||||
/* MenuDemo.java requires images/middle.gif. */
|
||||
|
||||
/*
|
||||
* This class is just like MenuLookDemo, except the menu items
|
||||
* actually do something, thanks to event listeners.
|
||||
*/
|
||||
public class MenuDemo implements ActionListener, ItemListener {
|
||||
JTextArea output;
|
||||
JScrollPane scrollPane;
|
||||
String newline = "\n";
|
||||
|
||||
public JMenuBar createMenuBar() {
|
||||
JMenuBar menuBar;
|
||||
JMenu menu, submenu;
|
||||
JMenuItem menuItem;
|
||||
JRadioButtonMenuItem rbMenuItem;
|
||||
JCheckBoxMenuItem cbMenuItem;
|
||||
|
||||
//Create the menu bar.
|
||||
menuBar = new JMenuBar();
|
||||
|
||||
//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);
|
||||
|
||||
ImageIcon icon = createImageIcon("images/middle.gif");
|
||||
menuItem = new JMenuItem("Both text and icon", icon);
|
||||
menuItem.setMnemonic(KeyEvent.VK_B);
|
||||
menuItem.addActionListener(this);
|
||||
menu.add(menuItem);
|
||||
|
||||
menuItem = new JMenuItem(icon);
|
||||
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.
|
||||
JMenuItem anotherMenu = new JMenuItem("Another Menu");
|
||||
anotherMenu.setMnemonic(KeyEvent.VK_N);
|
||||
anotherMenu.getAccessibleContext().setAccessibleDescription("This menu does nothing");
|
||||
anotherMenu.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
System.out.println("Click!");
|
||||
// JOptionPane.showMessageDialog(null, "Hello There!");
|
||||
}
|
||||
});
|
||||
menuBar.add(anotherMenu);
|
||||
|
||||
return menuBar;
|
||||
}
|
||||
|
||||
public Container createContentPane() {
|
||||
//Create the content-pane-to-be.
|
||||
JPanel contentPane = new JPanel(new BorderLayout());
|
||||
contentPane.setOpaque(true);
|
||||
|
||||
//Create a scrolled text area.
|
||||
output = new JTextArea(5, 30);
|
||||
output.setEditable(false);
|
||||
scrollPane = new JScrollPane(output);
|
||||
|
||||
//Add the text area to the content pane.
|
||||
contentPane.add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
return contentPane;
|
||||
}
|
||||
|
||||
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);
|
||||
output.setCaretPosition(output.getDocument().getLength());
|
||||
}
|
||||
|
||||
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);
|
||||
output.setCaretPosition(output.getDocument().getLength());
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
/** Returns an ImageIcon, or null if the path was invalid. */
|
||||
protected static ImageIcon createImageIcon(String path) {
|
||||
java.net.URL imgURL = MenuDemo.class.getResource(path);
|
||||
if (imgURL != null) {
|
||||
return new ImageIcon(imgURL);
|
||||
} else {
|
||||
System.err.println("Couldn't find file: " + path);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the GUI and show it. For thread safety,
|
||||
* this method should be invoked from the
|
||||
* event-dispatching thread.
|
||||
*/
|
||||
private static void createAndShowGUI() {
|
||||
//Create and set up the window.
|
||||
JFrame frame = new JFrame("MenuDemo");
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
|
||||
//Create and set up the content pane.
|
||||
MenuDemo demo = new MenuDemo();
|
||||
frame.setJMenuBar(demo.createMenuBar());
|
||||
frame.setContentPane(demo.createContentPane());
|
||||
|
||||
//Display the window.
|
||||
frame.setSize(450, 260);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
//Schedule a job for the event-dispatching thread:
|
||||
//creating and showing this application's GUI.
|
||||
javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
createAndShowGUI();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user