windowsrootpaneui.java
来自「java jdk 1.4的源码」· Java 代码 · 共 187 行
JAVA
187 行
/* * @(#)WindowsRootPaneUI.java 1.10 03/01/23 * * Copyright 2003 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.Container;import java.awt.Event;import java.awt.KeyEventPostProcessor;import java.awt.Window;import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import javax.swing.AbstractAction;import javax.swing.ActionMap;import javax.swing.InputMap;import javax.swing.KeyStroke;import javax.swing.JComponent;import javax.swing.JRootPane;import javax.swing.SwingUtilities;import javax.swing.UIManager;import javax.swing.AbstractButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.MenuElement;import javax.swing.MenuSelectionManager;import javax.swing.plaf.ActionMapUIResource;import javax.swing.plaf.ComponentUI;import javax.swing.plaf.InputMapUIResource;import javax.swing.plaf.basic.BasicRootPaneUI;import javax.swing.plaf.basic.ComboPopup;/** * Windows implementation of RootPaneUI, there is one shared between all * JRootPane instances. * * @version 1.10 01/23/03 * @author Mark Davidson * @since 1.4 */public class WindowsRootPaneUI extends BasicRootPaneUI { private final static WindowsRootPaneUI windowsRootPaneUI = new WindowsRootPaneUI(); static final AltProcessor altProcessor = new AltProcessor(); public static ComponentUI createUI(JComponent c) { return windowsRootPaneUI; } static class AltProcessor implements KeyEventPostProcessor { static boolean altKeyPressed = false; static boolean menuCanceledOnPress = false; static JRootPane root = null; static Window winAncestor = null; void repaintMnemonicsInWindow(Window w) { if(w == null || !w.isShowing()) { return; } Window[] ownedWindows = w.getOwnedWindows(); for(int i=0;i<ownedWindows.length;i++) { repaintMnemonicsInWindow(ownedWindows[i]); } repaintMnemonicsInComponents(w.getComponents()); } void repaintMnemonicsInComponents(Component[] c) { for(int i=0;i<c.length;i++) { if(c[i] instanceof AbstractButton && ((AbstractButton)c[i]).getMnemonic() != '\0') { c[i].repaint(); continue; } if(c[i] instanceof Container) { repaintMnemonicsInComponents( ((Container)c[i]).getComponents()); } } } void altPressed(KeyEvent ev) { MenuSelectionManager msm = MenuSelectionManager.defaultManager(); MenuElement[] path = msm.getSelectedPath(); if (path.length > 0 && ! (path[0] instanceof ComboPopup)) { msm.clearSelectedPath(); menuCanceledOnPress = true; ev.consume(); } else if(path.length > 0) { // We are in ComboBox menuCanceledOnPress = false; WindowsLookAndFeel.setMnemonicHidden(false); repaintMnemonicsInWindow(winAncestor); ev.consume(); } else { menuCanceledOnPress = false; WindowsLookAndFeel.setMnemonicHidden(false); repaintMnemonicsInWindow(winAncestor); JMenuBar mbar = root != null ? root.getJMenuBar() : null; if(mbar == null && winAncestor instanceof JFrame) { mbar = ((JFrame)winAncestor).getJMenuBar(); } JMenu menu = mbar != null ? mbar.getMenu(0) : null; if(menu != null) { ev.consume(); } } } void altReleased(KeyEvent ev) { if (menuCanceledOnPress) { WindowsLookAndFeel.setMnemonicHidden(true); repaintMnemonicsInWindow(winAncestor); return; } MenuSelectionManager msm = MenuSelectionManager.defaultManager(); if (msm.getSelectedPath().length == 0) { // if no menu is active, we try activating the menubar JMenuBar mbar = root != null ? root.getJMenuBar() : null; if(mbar == null && winAncestor instanceof JFrame) { mbar = ((JFrame)winAncestor).getJMenuBar(); } JMenu menu = mbar != null ? mbar.getMenu(0) : null; if (menu != null) { MenuElement[] path = new MenuElement[2]; path[0] = mbar; path[1] = menu; msm.setSelectedPath(path); } else if(!WindowsLookAndFeel.isMnemonicHidden()) { WindowsLookAndFeel.setMnemonicHidden(true); repaintMnemonicsInWindow(winAncestor); } } else { if((msm.getSelectedPath())[0] instanceof ComboPopup) { WindowsLookAndFeel.setMnemonicHidden(true); repaintMnemonicsInWindow(winAncestor); } } } public boolean postProcessKeyEvent(KeyEvent ev) { if (ev.getKeyCode() == KeyEvent.VK_ALT) { root = SwingUtilities.getRootPane(ev.getComponent()); winAncestor = SwingUtilities.getWindowAncestor(root); if (ev.getID() == KeyEvent.KEY_PRESSED) { if (!altKeyPressed) { altPressed(ev); } altKeyPressed = true; return true; } else if (ev.getID() == KeyEvent.KEY_RELEASED) { if (altKeyPressed) { altReleased(ev); } else { MenuSelectionManager msm = MenuSelectionManager.defaultManager(); MenuElement[] path = msm.getSelectedPath(); if (path.length <= 0) { WindowsLookAndFeel.setMnemonicHidden(true); repaintMnemonicsInWindow(winAncestor); } } altKeyPressed = false; } } else { altKeyPressed = false; } return false; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?