⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpmenuitemui.java

📁 Swing Windows XP 外观和感觉 BeanSoft 修改版, 2003年 原始的作者: XP 外观和感觉 by Stefan Krause - http://www.stefan
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		checkIconRect.setBounds(zeroRect);		arrowIconRect.setBounds(zeroRect);		viewRect.setBounds(0, 0, Short.MAX_VALUE, Short.MAX_VALUE);		r.setBounds(zeroRect);	}	/**	 * We draw the background in paintMenuItem()	 * so override update (which fills the background of opaque	 * components by default) to just call paint().	 *	 */	public void update(Graphics g, JComponent c) {		paint(g, c);	}	public void paint(Graphics g, JComponent c) {		paintMenuItem(g, c, checkIcon, arrowIcon, selectionBackground, selectionForeground, defaultTextIconGap);	}	/*	 * Returns false if the component is a JMenu and it is a top	 * level menu (on the menubar).	 */	private boolean useCheckAndArrow() {		boolean b = true;		if ((menuItem instanceof JMenu) && (((JMenu) menuItem).isTopLevelMenu())) {			b = false;		}		return b;	}	public MenuElement[] getPath() {		MenuSelectionManager m = MenuSelectionManager.defaultManager();		MenuElement oldPath[] = m.getSelectedPath();		MenuElement newPath[];		int i = oldPath.length;		if (i == 0)			return new MenuElement[0];		Component parent = menuItem.getParent();		if (oldPath[i - 1].getComponent() == parent) {			// The parent popup menu is the last so far			newPath = new MenuElement[i + 1];			System.arraycopy(oldPath, 0, newPath, 0, i);			newPath[i] = menuItem;		} else {			// A sibling menuitem is the current selection			// 			//  This probably needs to handle 'exit submenu into 			// a menu item.  Search backwards along the current			// selection until you find the parent popup menu,			// then copy up to that and add yourself...			int j;			for (j = oldPath.length - 1; j >= 0; j--) {				if (oldPath[j].getComponent() == parent)					break;			}			newPath = new MenuElement[j + 2];			System.arraycopy(oldPath, 0, newPath, 0, j + 1);			newPath[j + 1] = menuItem;		}		return newPath;	}	protected class MouseInputHandler implements MouseInputListener {		public void mouseClicked(MouseEvent e) {		}		public void mousePressed(MouseEvent e) {		}		public void mouseReleased(MouseEvent e) {			MenuSelectionManager manager = MenuSelectionManager.defaultManager();			Point p = e.getPoint();			if (p.x >= 0 && p.x < menuItem.getWidth() && p.y >= 0 && p.y < menuItem.getHeight()) {				doClick(manager);			} else {				manager.processMouseEvent(e);			}		}		public void mouseEntered(MouseEvent e) {			MenuSelectionManager manager = MenuSelectionManager.defaultManager();			int modifiers = e.getModifiers();			// 4188027: drag enter/exit added in JDK 1.1.7A, JDK1.2	    			if ((modifiers & (InputEvent.BUTTON1_MASK | InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) != 0) {				MenuSelectionManager.defaultManager().processMouseEvent(e);			} else {				manager.setSelectedPath(getPath());			}		}		public void mouseExited(MouseEvent e) {			MenuSelectionManager manager = MenuSelectionManager.defaultManager();			int modifiers = e.getModifiers();			// 4188027: drag enter/exit added in JDK 1.1.7A, JDK1.2			if ((modifiers & (InputEvent.BUTTON1_MASK | InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) != 0) {				MenuSelectionManager.defaultManager().processMouseEvent(e);			} else {				MenuElement path[] = manager.getSelectedPath();				if (path.length > 1) {					MenuElement newPath[] = new MenuElement[path.length - 1];					int i, c;					for (i = 0, c = path.length - 1; i < c; i++)						newPath[i] = path[i];					manager.setSelectedPath(newPath);				}			}		}		public void mouseDragged(MouseEvent e) {			MenuSelectionManager.defaultManager().processMouseEvent(e);		}		public void mouseMoved(MouseEvent e) {		}	}	private class MenuDragMouseHandler implements MenuDragMouseListener {		public void menuDragMouseEntered(MenuDragMouseEvent e) {		}		public void menuDragMouseDragged(MenuDragMouseEvent e) {			MenuSelectionManager manager = e.getMenuSelectionManager();			MenuElement path[] = e.getPath();			manager.setSelectedPath(path);		}		public void menuDragMouseExited(MenuDragMouseEvent e) {		}		public void menuDragMouseReleased(MenuDragMouseEvent e) {			MenuSelectionManager manager = e.getMenuSelectionManager();			MenuElement path[] = e.getPath();			Point p = e.getPoint();			if (p.x >= 0 && p.x < menuItem.getWidth() && p.y >= 0 && p.y < menuItem.getHeight()) {				doClick(manager);			} else {				manager.clearSelectedPath();			}		}	}	private class MenuKeyHandler implements MenuKeyListener {		/**		 * Handles the mnemonic key typed in the MenuItem if this menuItem is in		 * a standalone popup menu. This invocation normally 		 * handled in BasicMenuUI.MenuKeyHandler.menuKeyPressed. Ideally, the 		 * MenuKeyHandlers for both BasicMenuItemUI and BasicMenuUI can be consolidated		 * into BasicPopupMenuUI but that would require an semantic change. This		 * would result in a performance win since we can shortcut a lot of the needless		 * processing from MenuSelectionManager.processKeyEvent(). See 4670831.		 */		public void menuKeyTyped(MenuKeyEvent e) {			if (DEBUG) {				System.out.println("in BasicMenuItemUI.menuKeyTyped for " + menuItem.getText());			}			int key = menuItem.getMnemonic();			if (key == 0 || e.getPath().length != 2) // Hack! Only proceed if in a JPopupMenu				return;			if (lower((char) key) == lower(e.getKeyChar())) {				MenuSelectionManager manager = e.getMenuSelectionManager();				doClick(manager);				e.consume();			}		}		public void menuKeyPressed(MenuKeyEvent e) {			if (DEBUG) {				System.out.println("in BasicMenuItemUI.menuKeyPressed for " + menuItem.getText());			}		}		public void menuKeyReleased(MenuKeyEvent e) {		}		private char lower(char keyChar) {			return Character.toLowerCase(keyChar);		}	}	private class PropertyChangeHandler implements PropertyChangeListener {		public void propertyChange(PropertyChangeEvent e) {			String name = e.getPropertyName();			if (name.equals("labelFor") || name.equals("displayedMnemonic") || name.equals("accelerator")) {				updateAcceleratorBinding();			} else if (name.equals("text") || "font".equals(name) || "foreground".equals(name)) {				// remove the old html view client property if one				// existed, and install a new one if the text installed				// into the JLabel is html source.				JMenuItem lbl = ((JMenuItem) e.getSource());				String text = lbl.getText();				BasicHTML.updateRenderer(lbl, text);			}		}	}	private static class ClickAction extends AbstractAction {		public void actionPerformed(ActionEvent e) {			JMenuItem mi = (JMenuItem) e.getSource();			MenuSelectionManager.defaultManager().clearSelectedPath();			mi.doClick();		}	}	/**	 * Call this method when a menu item is to be activated.	 * This method handles some of the details of menu item activation	 * such as clearing the selected path and messaging the 	 * JMenuItem's doClick() method.	 *	 * @param msm  A MenuSelectionManager. The visual feedback and 	 *             internal bookkeeping tasks are delegated to 	 *             this MenuSelectionManager. If <code>null</code> is	 *             passed as this argument, the 	 *             <code>MenuSelectionManager.defaultManager</code> is	 *             used.	 * @see MenuSelectionManager	 * @see JMenuItem#doClick(int)	 * @since 1.4	 */	protected void doClick(MenuSelectionManager msm) {		// Visual feedback		if (msm == null) {			msm = MenuSelectionManager.defaultManager();		}		msm.clearSelectedPath();		menuItem.doClick(0);	}	/** 	 * This is to see if the menu item in question is part of the 	 * system menu on an internal frame.	 * The Strings that are being checked can be found in 	 * MetalInternalFrameTitlePaneUI.java,	 * WindowsInternalFrameTitlePaneUI.java, and	 * MotifInternalFrameTitlePaneUI.java.	 *	 * @since 1.4	 */	private boolean isInternalFrameSystemMenu() {		String actionCommand = menuItem.getActionCommand();		if ((actionCommand == "Close") || (actionCommand == "Minimize") || (actionCommand == "Restore") || (actionCommand == "Maximize")) {			return true;		} else {			return false;		}	}	//////////////////////////////////////////////////////////	public static class EmptyIcon implements Icon {		int width;		int height;		public EmptyIcon(int width, int height) {			this.height = height;			this.width = width;		}		public void paintIcon(Component c, Graphics g, int x, int y) {			return;		}		public int getIconWidth() {			return width;		}		public int getIconHeight() {			return height;		}	}	public static ComponentUI createUI(JComponent c) {		return new XPMenuItemUI();	}	protected void installDefaults() {		String prefix = getPropertyPrefix();		acceleratorFont = UIManager.getFont("MenuItem.acceleratorFont");		menuItem.setOpaque(true);		if (menuItem.getMargin() == null || (menuItem.getMargin() instanceof UIResource)) {			menuItem.setMargin(UIManager.getInsets(prefix + ".margin"));		}		defaultTextIconGap = 4; // Should be from table		LookAndFeel.installBorder(menuItem, prefix + ".border");		oldBorderPainted = menuItem.isBorderPainted();		menuItem.setBorderPainted(((Boolean) (UIManager.get(prefix + ".borderPainted"))).booleanValue());		LookAndFeel.installColorsAndFont(menuItem, prefix + ".background", prefix + ".foreground", prefix + ".font");		// MenuItem specific defaults		if (selectionBackground == null || selectionBackground instanceof UIResource) {			selectionBackground = UIManager.getColor(prefix + ".selectionBackground");		}		if (selectionForeground == null || selectionForeground instanceof UIResource) {			selectionForeground = UIManager.getColor(prefix + ".selectionForeground");		}		if (disabledForeground == null || disabledForeground instanceof UIResource) {			disabledForeground = UIManager.getColor(prefix + ".disabledForeground");		}		if (acceleratorForeground == null || acceleratorForeground instanceof UIResource) {			acceleratorForeground = UIManager.getColor(prefix + ".acceleratorForeground");		}		if (acceleratorSelectionForeground == null || acceleratorSelectionForeground instanceof UIResource) {			acceleratorSelectionForeground = UIManager.getColor(prefix + ".acceleratorSelectionForeground");		}		// Get accelerator delimiter		acceleratorDelimiter = UIManager.getString("MenuItem.acceleratorDelimiter");		if (acceleratorDelimiter == null) {			acceleratorDelimiter = "+";		}		// Icons		if (arrowIcon == null || arrowIcon instanceof UIResource) {			arrowIcon = UIManager.getIcon(prefix + ".arrowIcon");		}		if (checkIcon == null || checkIcon instanceof UIResource) {			checkIcon = UIManager.getIcon(prefix + ".checkIcon");		}		// Changed:		defaultTextIconGap = 8; // Should be from table		defaultIconGap = 4; // Should be from table	}	protected Dimension getPreferredMenuItemSize(JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap) {		JMenuItem b = (JMenuItem) c;		Icon icon = (Icon) b.getIcon();		String text = b.getText();		KeyStroke accelerator = b.getAccelerator();		String acceleratorText = "";		if (accelerator != null) {			int modifiers = accelerator.getModifiers();			if (modifiers > 0) {				acceleratorText = KeyEvent.getKeyModifiersText(modifiers);				//acceleratorText += "-";				acceleratorText += acceleratorDelimiter;			}			int keyCode = accelerator.getKeyCode();			if (keyCode != 0) {				acceleratorText += KeyEvent.getKeyText(keyCode);			} else {				acceleratorText += accelerator.getKeyChar();			}		}		Font font = b.getFont();		FontMetrics fm = b.getToolkit().getFontMetrics(font);		FontMetrics fmAccel = b.getToolkit().getFontMetrics(acceleratorFont);		resetRects();		layoutMenuItem(fm, text, fmAccel, acceleratorText, icon, checkIcon, arrowIcon, b.getVerticalAlignment(), b.getHorizontalAlignment(), b.getVerticalTextPosition(), b.getHorizontalTextPosition(), viewRect, iconRect, textRect, acceleratorRect, checkIconRect, arrowIconRect, text == null ? 0 : defaultTextIconGap, defaultIconGap);		// find the union of the icon and text rects		r.setBounds(textRect);		r = SwingUtilities.computeUnion(iconRect.x, iconRect.y, iconRect.width, iconRect.height, r);		//   r = iconRect.union(textRect);		// To make the accelerator texts appear in a column, find the widest MenuItem text		// and the widest accelerator text.		//Get the parent, which stores the information.		Container parent = menuItem.getParent();		//Check the parent, and see that it is not a top-level menu.		if (parent != null && parent instanceof JComponent && !(menuItem instanceof JMenu && ((JMenu) menuItem).isTopLevelMenu())) {			JComponent p = (JComponent) parent;

⌨️ 快捷键说明

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