/* * @(#)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); } } } }