home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 July & August
/
Pcwk78a98.iso
/
Internet
/
Javadraw
/
DATA.Z
/
PopupMenu.java
< prev
next >
Wrap
Text File
|
1997-08-30
|
3KB
|
107 lines
/*
* @(#)PopupMenu.java 1.9 97/01/27
*
* Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
* CopyrightVersion 1.1_beta
*
*/
package java.awt;
import java.awt.peer.PopupMenuPeer;
/**
* A class that implements a menu which can be dynamically popped up
* at a specified position within a component.
*
* @version 1.9 01/27/97
* @author Amy Fowler
*/
public class PopupMenu extends Menu {
private static final String base = "popup";
static int nameCounter = 0;
/*
* JDK 1.1 serialVersionUID
*/
private static final long serialVersionUID = -4620452533522760060L;
/**
* Creates a new popup menu.
*/
public PopupMenu() {
this("");
}
/**
* Creates a new popup menu with the specified name.
* @param title the title string for the popup menu
*/
public PopupMenu(String label) {
super(label);
this.name = base + nameCounter++;
}
/**
* Creates the popup menu's peer. The peer allows us to change the
* appearance of the popup menu without changing any of the popup menu's
* functionality.
*/
public synchronized void addNotify() {
if (peer == null) {
peer = Toolkit.getDefaultToolkit().createPopupMenu(this);
}
int nitems = getItemCount();
for (int i = 0 ; i < nitems ; i++) {
MenuItem mi = getItem(i);
mi.parent = this;
mi.addNotify();
}
}
/**
* Shows the popup menu at the x, y position relative to an origin component.
* The origin component must be contained within the component hierarchy
* of the popup menu's parent. Both the origin and the parent must be
* showing on the screen for this method to be valid.
* @param origin the component which defines the coordinate space
* @param x the x coordinate position to popup the menu
* @param y the y coordinate position to popup the menu
*/
public void show(Component origin, int x, int y) {
Component p = (Component)parent;
if (p == null) {
throw new NullPointerException("parent is null");
}
if (p != origin &&
p instanceof Container && !((Container)p).isAncestorOf(origin)) {
throw new IllegalArgumentException("origin not in parent's hierarchy");
}
if (p.getPeer() == null || !p.isShowing()) {
throw new RuntimeException("parent not showing on screen");
}
if (peer == null) {
addNotify();
}
((PopupMenuPeer)peer).show(new Event(origin, 0, Event.MOUSE_DOWN, x, y, 0, 0));
}
}