/* * @(#)WindowsPopupMenuUI.java 1.21 04/04/16 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.java.swing.plaf.windows; import java.awt.Component; import java.awt.KeyEventPostProcessor; import java.awt.KeyboardFocusManager; import java.awt.Window; import java.awt.event.KeyEvent; import javax.swing.*; import javax.swing.event.*; import javax.swing.plaf.*; import javax.swing.plaf.basic.*; /** * Windows rendition of the component. *
* Warning:
* Serialized objects of this class will not be compatible with
* future Swing releases. The current serialization support is appropriate
* for short term storage or RMI between applications running the same
* version of Swing. A future release of Swing will provide support for
* long term persistence.
*/
public class WindowsPopupMenuUI extends BasicPopupMenuUI {
static MnemonicListener mnemonicListener = null;
public static ComponentUI createUI(JComponent c) {
return new WindowsPopupMenuUI();
}
public void installListeners() {
super.installListeners();
if (! UIManager.getBoolean("Button.showMnemonics") &&
mnemonicListener == null) {
mnemonicListener = new MnemonicListener();
MenuSelectionManager.defaultManager().
addChangeListener(mnemonicListener);
}
}
/**
* Returns the Popup
that will be responsible for
* displaying the JPopupMenu
.
*
* @param popupMenu JPopupMenu requesting Popup
* @param x Screen x location Popup is to be shown at
* @param y Screen y location Popup is to be shown at.
* @return Popup that will show the JPopupMenu
* @since 1.4
*/
public Popup getPopup(JPopupMenu popupMenu, int x, int y) {
PopupFactory popupFactory = PopupFactory.getSharedInstance();
return popupFactory.getPopup(popupMenu.getInvoker(), popupMenu, x, y);
}
static class MnemonicListener implements ChangeListener {
JRootPane repaintRoot = null;
public void stateChanged(ChangeEvent ev) {
MenuSelectionManager msm = (MenuSelectionManager)ev.getSource();
MenuElement[] path = msm.getSelectedPath();
if (path.length == 0) {
if(!WindowsLookAndFeel.isMnemonicHidden()) {
// menu was canceled -- hide mnemonics
WindowsLookAndFeel.setMnemonicHidden(true);
if (repaintRoot != null) {
Window win =
SwingUtilities.getWindowAncestor(repaintRoot);
WindowsUtils.repaintMnemonicsInWindow(win);
}
}
} else {
Component c = (Component)path[0];
if (c instanceof JPopupMenu) c = ((JPopupMenu)c).getInvoker();
repaintRoot = SwingUtilities.getRootPane(c);
}
}
}
}