windowsmenubarui.java

来自「JAVA 所有包」· Java 代码 · 共 170 行

JAVA
170
字号
/* * @(#)WindowsMenuBarUI.java	1.16 06/12/15 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.windows;import javax.swing.plaf.basic.*;import javax.swing.*;import javax.swing.plaf.ActionMapUIResource;import javax.swing.plaf.ComponentUI;import java.awt.event.ActionEvent;import java.awt.event.HierarchyEvent;import java.awt.event.HierarchyListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.awt.event.WindowStateListener;import java.awt.*;import com.sun.java.swing.plaf.windows.TMSchema.*;import com.sun.java.swing.plaf.windows.XPStyle.*;/** * Windows rendition of the component. * <p> * <strong>Warning:</strong> * 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 WindowsMenuBarUI extends BasicMenuBarUI{    /* to be accessed on the EDT only */    private WindowListener windowListener = null;    private HierarchyListener hierarchyListener = null;    private Window window = null;        public static ComponentUI createUI(JComponent x) {	return new WindowsMenuBarUI();    }        @Override    protected void uninstallListeners() {        uninstallWindowListener();        if (hierarchyListener != null) {            menuBar.removeHierarchyListener(hierarchyListener);            hierarchyListener = null;           }        super.uninstallListeners();    }    private void installWindowListener() {        if (windowListener == null) {            Component component = menuBar.getTopLevelAncestor();            if (component instanceof Window) {                window = (Window) component;                windowListener = new WindowAdapter() {                    @Override                    public void windowActivated(WindowEvent e) {                        menuBar.repaint();                    }                    @Override                    public void windowDeactivated(WindowEvent e) {                        menuBar.repaint();                    }                };                ((Window) component).addWindowListener(windowListener);            }        }    }    private void uninstallWindowListener() {        if (windowListener != null && window != null) {            window.removeWindowListener(windowListener);        }        window = null;        windowListener = null;    }    @Override    protected void installListeners() {        if (WindowsLookAndFeel.isOnVista()) {            installWindowListener();            hierarchyListener =                 new HierarchyListener() {                    public void hierarchyChanged(HierarchyEvent e) {                        if ((e.getChangeFlags()                                 & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0) {                            if (menuBar.isDisplayable()) {                                installWindowListener();                            } else {                                uninstallWindowListener();                            }                        }                    }            };            menuBar.addHierarchyListener(hierarchyListener);        }        super.installListeners();    }        protected void installKeyboardActions() {        super.installKeyboardActions();	ActionMap map = SwingUtilities.getUIActionMap(menuBar);        if (map == null) {            map = new ActionMapUIResource();            SwingUtilities.replaceUIActionMap(menuBar, map);        }        map.put("takeFocus", new TakeFocus());    }     /**     * Action that activates the menu (e.g. when F10 is pressed).     * Unlike BasicMenuBarUI.TakeFocus, this Action will not show menu popup.     */    private static class TakeFocus extends AbstractAction {	public void actionPerformed(ActionEvent e) {	    JMenuBar menuBar = (JMenuBar)e.getSource();	    JMenu menu = menuBar.getMenu(0);	    if (menu != null) {                MenuSelectionManager msm =                    MenuSelectionManager.defaultManager();                MenuElement path[] = new MenuElement[2];                path[0] = (MenuElement)menuBar;                path[1] = (MenuElement)menu;                msm.setSelectedPath(path);                // show mnemonics                WindowsLookAndFeel.setMnemonicHidden(false);                WindowsLookAndFeel.repaintRootPane(menuBar);	    }	}    }    @Override    public void paint(Graphics g, JComponent c) {        if (WindowsMenuItemUI.isVistaPainting()) {            XPStyle xp = XPStyle.getXP();            Skin skin;            skin = xp.getSkin(c, Part.MP_BARBACKGROUND);            int width = c.getWidth();            int height = c.getHeight();            State state =  isActive(c) ? State.ACTIVE : State.INACTIVE;            skin.paintSkin(g, 0, 0, width, height, state);        } else {            super.paint(g, c);        }    }        /**     * Checks if component belongs to an active window.     * @param c component to check     * @return true if component belongs to an active window     */    static boolean isActive(JComponent c) {        JRootPane rootPane = c.getRootPane();        if (rootPane != null) {            Component component = rootPane.getParent();            if (component instanceof Window) {                return ((Window) component).isActive();            }        }        return true;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?