FileDocCategorySizeDatePackage
WindowsMenuUI.javaAPI DocJava SE 5 API5529Fri Aug 26 14:54:50 BST 2005com.sun.java.swing.plaf.windows

WindowsMenuUI

public class WindowsMenuUI extends BasicMenuUI
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.

Fields Summary
Constructors Summary
Methods Summary
protected javax.swing.event.MouseInputListenercreateMouseInputListener(javax.swing.JComponent c)

        return new WindowsMouseInputHandler();
    
public static javax.swing.plaf.ComponentUIcreateUI(javax.swing.JComponent x)

	return new WindowsMenuUI();
    
protected voidinstallDefaults()

	super.installDefaults();

	if (!WindowsLookAndFeel.isClassicWindows()) {
	    menuItem.setRolloverEnabled(true);
	}
    
protected voidpaintBackground(java.awt.Graphics g, javax.swing.JMenuItem menuItem, java.awt.Color bgColor)
Draws the background of the menu.

since
1.4

	JMenu menu = (JMenu)menuItem;
	ButtonModel model = menu.getModel();

	// Use superclass method for the old Windows LAF,
        // for submenus, and for XP toplevel if selected or pressed
	if (WindowsLookAndFeel.isClassicWindows() ||
	    !menu.isTopLevelMenu() ||
	    (XPStyle.getXP() != null && (model.isArmed() || model.isSelected()))) {

	    super.paintBackground(g, menu, bgColor);
	    return;
	}

	Color oldColor = g.getColor();
        int menuWidth = menu.getWidth();
        int menuHeight = menu.getHeight();

	UIDefaults table = UIManager.getLookAndFeelDefaults();
	Color highlight = table.getColor("controlLtHighlight");
	Color shadow = table.getColor("controlShadow");

	g.setColor(menu.getBackground());
	g.fillRect(0,0, menuWidth, menuHeight);

        if (menu.isOpaque()) {
            if (model.isArmed() || model.isSelected()) {
		// Draw a lowered bevel border
		g.setColor(shadow);
		g.drawLine(0,0, menuWidth - 1,0);
		g.drawLine(0,0, 0,menuHeight - 2);

		g.setColor(highlight);
		g.drawLine(menuWidth - 1,0, menuWidth - 1,menuHeight - 2);
		g.drawLine(0,menuHeight - 2, menuWidth - 1,menuHeight - 2);
            } else if (model.isRollover() && model.isEnabled()) {
		// Only paint rollover if no other menu on menubar is selected
		boolean otherMenuSelected = false;
		MenuElement[] menus = ((JMenuBar)menu.getParent()).getSubElements();
		for (int i = 0; i < menus.length; i++) {
		    if (((JMenuItem)menus[i]).isSelected()) {
			otherMenuSelected = true;
			break;
		    }
		}
		if (!otherMenuSelected) {
		    if (XPStyle.getXP() != null) {
			g.setColor(selectionBackground); // Uses protected field.
			g.fillRect(0, 0, menuWidth, menuHeight);
		    } else {
			// Draw a raised bevel border
			g.setColor(highlight);
			g.drawLine(0,0, menuWidth - 1,0);
			g.drawLine(0,0, 0,menuHeight - 2);

			g.setColor(shadow);
			g.drawLine(menuWidth - 1,0, menuWidth - 1,menuHeight - 2);
			g.drawLine(0,menuHeight - 2, menuWidth - 1,menuHeight - 2);
		    }
		}
            }
        }
	g.setColor(oldColor);
    
protected voidpaintText(java.awt.Graphics g, javax.swing.JMenuItem menuItem, java.awt.Rectangle textRect, java.lang.String text)
Method which renders the text of the current menu item.

param
g Graphics context
param
menuItem Current menu item to render
param
textRect Bounding rectangle to render the text.
param
text String to render
since
1.4


	JMenu menu = (JMenu)menuItem;
	ButtonModel model = menuItem.getModel();
        Color oldColor = g.getColor();

	// Only paint rollover if no other menu on menubar is selected
	boolean paintRollover = model.isRollover();
	if (paintRollover && menu.isTopLevelMenu()) {
	    MenuElement[] menus = ((JMenuBar)menu.getParent()).getSubElements();
	    for (int i = 0; i < menus.length; i++) {
		if (((JMenuItem)menus[i]).isSelected()) {
		    paintRollover = false;
		    break;
		}
	    }
	}

	if ((model.isSelected() && (WindowsLookAndFeel.isClassicWindows() ||
				    !menu.isTopLevelMenu())) ||
	    (XPStyle.getXP() != null && (paintRollover ||
					 model.isArmed() ||
					 model.isSelected()))) {
	    g.setColor(selectionForeground); // Uses protected field.
	}

        WindowsGraphicsUtils.paintText(g, menuItem, textRect, text, 0);
 
        g.setColor(oldColor);