windowsiconfactory.java

来自「JAVA 所有包」· Java 代码 · 共 888 行 · 第 1/2 页

JAVA
888
字号
/* * @(#)WindowsIconFactory.java	1.31 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.*;import javax.swing.plaf.ButtonUI;import javax.swing.plaf.UIResource;import java.awt.*;import java.io.Serializable;import static com.sun.java.swing.plaf.windows.TMSchema.*;import static com.sun.java.swing.plaf.windows.XPStyle.Skin;import sun.swing.MenuItemCheckIconFactory;/** * Factory object that can vend Icons appropriate for the Windows L & F. * <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. * * @version 1.31 12/15/06 * @author David Kloba * @author Georges Saab * @author Rich Schiavi */public class WindowsIconFactory implements Serializable{    private static Icon frame_closeIcon;    private static Icon frame_iconifyIcon;    private static Icon frame_maxIcon;    private static Icon frame_minIcon;    private static Icon frame_resizeIcon;    private static Icon checkBoxIcon;    private static Icon radioButtonIcon;    private static Icon checkBoxMenuItemIcon;    private static Icon radioButtonMenuItemIcon;    private static Icon menuItemCheckIcon;    private static Icon menuItemArrowIcon;    private static Icon menuArrowIcon;    private static VistaMenuItemCheckIconFactory menuItemCheckIconFactory;    public static Icon getMenuItemCheckIcon() {	if (menuItemCheckIcon == null) {	    menuItemCheckIcon = new MenuItemCheckIcon();	}	return menuItemCheckIcon;    }    public static Icon getMenuItemArrowIcon() {	if (menuItemArrowIcon == null) {	    menuItemArrowIcon = new MenuItemArrowIcon();	}	return menuItemArrowIcon;    }    public static Icon getMenuArrowIcon() {	if (menuArrowIcon == null) {	    menuArrowIcon = new MenuArrowIcon();	}	return menuArrowIcon;    }    public static Icon getCheckBoxIcon() {	if (checkBoxIcon == null) {	    checkBoxIcon = new CheckBoxIcon();	}	return checkBoxIcon;    }    public static Icon getRadioButtonIcon() {	if (radioButtonIcon == null) {	    radioButtonIcon = new RadioButtonIcon();	}	return radioButtonIcon;    }    public static Icon getCheckBoxMenuItemIcon() {	if (checkBoxMenuItemIcon == null) {	    checkBoxMenuItemIcon = new CheckBoxMenuItemIcon();	}	return checkBoxMenuItemIcon;    }    public static Icon getRadioButtonMenuItemIcon() {	if (radioButtonMenuItemIcon == null) {	    radioButtonMenuItemIcon = new RadioButtonMenuItemIcon();	}	return radioButtonMenuItemIcon;    }    static    synchronized VistaMenuItemCheckIconFactory getMenuItemCheckIconFactory() {        if (menuItemCheckIconFactory == null) {            menuItemCheckIconFactory =                new VistaMenuItemCheckIconFactory();        }        return menuItemCheckIconFactory;    }    public static Icon createFrameCloseIcon() {	if (frame_closeIcon == null) {	    frame_closeIcon = new FrameButtonIcon(Part.WP_CLOSEBUTTON);	}	return frame_closeIcon;    }    public static Icon createFrameIconifyIcon() {	if (frame_iconifyIcon == null) {	    frame_iconifyIcon = new FrameButtonIcon(Part.WP_MINBUTTON);	}	return frame_iconifyIcon;    }    public static Icon createFrameMaximizeIcon() {	if (frame_maxIcon == null) {	    frame_maxIcon = new FrameButtonIcon(Part.WP_MAXBUTTON);	}	return frame_maxIcon;    }    public static Icon createFrameMinimizeIcon() {	if (frame_minIcon == null) {	    frame_minIcon = new FrameButtonIcon(Part.WP_RESTOREBUTTON);	}	return frame_minIcon;    }    public static Icon createFrameResizeIcon() {	if(frame_resizeIcon == null)	    frame_resizeIcon = new ResizeIcon();	return frame_resizeIcon;    }    private static class FrameButtonIcon implements Icon, Serializable {	private Part part;	private FrameButtonIcon(Part part) {	    this.part = part;	}	public void paintIcon(Component c, Graphics g, int x0, int y0) {	    int width = getIconWidth();	    int height = getIconHeight();	    XPStyle xp = XPStyle.getXP();	    if (xp != null) {		Skin skin = xp.getSkin(c, part);		JButton b = (JButton)c;		ButtonModel model = b.getModel();		// Find out if frame is inactive		JInternalFrame jif = (JInternalFrame)SwingUtilities.					getAncestorOfClass(JInternalFrame.class, b);                boolean jifSelected = (jif != null && jif.isSelected());		State state;		if (jifSelected) {		    if (!model.isEnabled()) {			state = State.DISABLED;		    } else if (model.isArmed() && model.isPressed()) {			state = State.PUSHED;		    } else if (model.isRollover()) {			state = State.HOT;		    } else {			state = State.NORMAL;		    }		} else {		    if (!model.isEnabled()) {			state = State.INACTIVEDISABLED;		    } else if (model.isArmed() && model.isPressed()) {			state = State.INACTIVEPUSHED;		    } else if (model.isRollover()) {			state = State.INACTIVEHOT;		    } else {			state = State.INACTIVENORMAL;		    }		}		skin.paintSkin(g, 0, 0, width, height, state);	    } else {		g.setColor(Color.black);		int x = width / 12 + 2;		int y = height / 5;		int h = height - y * 2 - 1;		int w = width * 3/4 -3;		int thickness2 = Math.max(height / 8, 2);		int thickness  = Math.max(width / 15, 1);		if (part == Part.WP_CLOSEBUTTON) {		    int lineWidth;		    if      (width > 47) lineWidth = 6;		    else if (width > 37) lineWidth = 5;		    else if (width > 26) lineWidth = 4;		    else if (width > 16) lineWidth = 3;		    else if (width > 12) lineWidth = 2;		    else                 lineWidth = 1;		    y = height / 12 + 2;		    if (lineWidth == 1) {			if (w % 2 == 1) { x++; w++; }			g.drawLine(x,     y, x+w-2, y+w-2);			g.drawLine(x+w-2, y, x,     y+w-2);		    } else if (lineWidth == 2) {			if (w > 6) { x++; w--; }			g.drawLine(x,     y, x+w-2, y+w-2);			g.drawLine(x+w-2, y, x,     y+w-2);			g.drawLine(x+1,   y, x+w-1, y+w-2);			g.drawLine(x+w-1, y, x+1,   y+w-2);		    } else {			x += 2; y++; w -= 2;			g.drawLine(x,     y,   x+w-1, y+w-1);			g.drawLine(x+w-1, y,   x,     y+w-1);			g.drawLine(x+1,   y,   x+w-1, y+w-2);			g.drawLine(x+w-2, y,   x,     y+w-2);			g.drawLine(x,     y+1, x+w-2, y+w-1);			g.drawLine(x+w-1, y+1, x+1,   y+w-1);			for (int i = 4; i <= lineWidth; i++) {			    g.drawLine(x+i-2,   y,     x+w-1,   y+w-i+1);			    g.drawLine(x,       y+i-2, x+w-i+1, y+w-1);			    g.drawLine(x+w-i+1, y,     x,       y+w-i+1);			    g.drawLine(x+w-1,   y+i-2, x+i-2,   y+w-1);			}		    }		} else if (part == Part.WP_MINBUTTON) {		    g.fillRect(x, y+h-thickness2, w-w/3, thickness2);		} else if (part == Part.WP_MAXBUTTON) {		    g.fillRect(x, y, w, thickness2);		    g.fillRect(x, y, thickness, h);		    g.fillRect(x+w-thickness, y, thickness, h);		    g.fillRect(x, y+h-thickness, w, thickness);		} else if (part == Part.WP_RESTOREBUTTON) {		    g.fillRect(x+w/3, y, w-w/3, thickness2);		    g.fillRect(x+w/3, y, thickness, h/3);		    g.fillRect(x+w-thickness, y, thickness, h-h/3);		    g.fillRect(x+w-w/3, y+h-h/3-thickness, w/3, thickness);		    g.fillRect(x, y+h/3, w-w/3, thickness2);		    g.fillRect(x, y+h/3, thickness, h-h/3);		    g.fillRect(x+w-w/3-thickness, y+h/3, thickness, h-h/3);		    g.fillRect(x, y+h-thickness, w-w/3, thickness);		}	    }	}	public int getIconWidth() {	    int width;	    if (XPStyle.getXP() != null) {		// Fix for XP bug where sometimes these sizes aren't updated properly                // Assume for now that height is correct and derive width using the                 // ratio from the uxtheme part		width = UIManager.getInt("InternalFrame.titleButtonHeight") -2;                Dimension d = XPStyle.getPartSize(Part.WP_CLOSEBUTTON, State.NORMAL);                if (d != null && d.width != 0 && d.height != 0) {                    width = (int) ((float) width * d.width / d.height);                }	    } else {		width = UIManager.getInt("InternalFrame.titleButtonWidth") -2;	    }	    if (XPStyle.getXP() != null) {		width -= 2;	    }	    return width;	}	public int getIconHeight() {	    int height = UIManager.getInt("InternalFrame.titleButtonHeight")-4;	    return height;	}    }        private static class ResizeIcon implements Icon, Serializable {            public void paintIcon(Component c, Graphics g, int x, int y) {                g.setColor(UIManager.getColor("InternalFrame.resizeIconHighlight"));                g.drawLine(0, 11, 11, 0);                g.drawLine(4, 11, 11, 4);                g.drawLine(8, 11, 11, 8);                g.setColor(UIManager.getColor("InternalFrame.resizeIconShadow"));                g.drawLine(1, 11, 11, 1);                g.drawLine(2, 11, 11, 2);                g.drawLine(5, 11, 11, 5);                g.drawLine(6, 11, 11, 6);                g.drawLine(9, 11, 11, 9);                g.drawLine(10, 11, 11, 10);            }            public int getIconWidth() { return 13; }            public int getIconHeight() { return 13; }        };    private static class CheckBoxIcon implements Icon, Serializable    {	final static int csize = 13;	public void paintIcon(Component c, Graphics g, int x, int y) {	    JCheckBox cb = (JCheckBox) c;	    ButtonModel model = cb.getModel();	    XPStyle xp = XPStyle.getXP();	    if (xp != null) {		State state;		if (model.isSelected()) {		    state = State.CHECKEDNORMAL;		    if (!model.isEnabled()) {			state = State.CHECKEDDISABLED;		    } else if (model.isPressed() && model.isArmed()) {			state = State.CHECKEDPRESSED;		    } else if (model.isRollover()) {			state = State.CHECKEDHOT;		    }		} else {		    state = State.UNCHECKEDNORMAL;		    if (!model.isEnabled()) {			state = State.UNCHECKEDDISABLED;		    } else if (model.isPressed() && model.isArmed()) {			state = State.UNCHECKEDPRESSED;		    } else if (model.isRollover()) {			state = State.UNCHECKEDHOT;		    }		}		Part part = Part.BP_CHECKBOX;		xp.getSkin(c, part).paintSkin(g, x, y, state);	    } else {		// outer bevel		if(!cb.isBorderPaintedFlat()) {		    // Outer top/left		    g.setColor(UIManager.getColor("CheckBox.shadow"));		    g.drawLine(x, y, x+11, y);		    g.drawLine(x, y+1, x, y+11);		    // Outer bottom/right		    g.setColor(UIManager.getColor("CheckBox.highlight"));		    g.drawLine(x+12, y, x+12, y+12);		    g.drawLine(x, y+12, x+11, y+12);		    // Inner top.left		    g.setColor(UIManager.getColor("CheckBox.darkShadow"));		    g.drawLine(x+1, y+1, x+10, y+1);		    g.drawLine(x+1, y+2, x+1, y+10);		    // Inner bottom/right		    g.setColor(UIManager.getColor("CheckBox.light"));		    g.drawLine(x+1, y+11, x+11, y+11);		    g.drawLine(x+11, y+1, x+11, y+10);		    // inside box 		    if((model.isPressed() && model.isArmed()) || !model.isEnabled()) {			g.setColor(UIManager.getColor("CheckBox.background"));		    } else {			g.setColor(UIManager.getColor("CheckBox.interiorBackground"));		    }		    g.fillRect(x+2, y+2, csize-4, csize-4);		} else {		    g.setColor(UIManager.getColor("CheckBox.shadow"));		    g.drawRect(x+1, y+1, csize-3, csize-3);		    if((model.isPressed() && model.isArmed()) || !model.isEnabled()) {			g.setColor(UIManager.getColor("CheckBox.background"));		    } else {			g.setColor(UIManager.getColor("CheckBox.interiorBackground"));		    }		    g.fillRect(x+2, y+2, csize-4, csize-4);		}		if(model.isEnabled()) {                    g.setColor(UIManager.getColor("CheckBox.foreground"));		} else {		    g.setColor(UIManager.getColor("CheckBox.shadow"));		}		// paint check		if (model.isSelected()) {		    g.drawLine(x+9, y+3, x+9, y+3);		    g.drawLine(x+8, y+4, x+9, y+4);		    g.drawLine(x+7, y+5, x+9, y+5);		    g.drawLine(x+6, y+6, x+8, y+6);		    g.drawLine(x+3, y+7, x+7, y+7);		    g.drawLine(x+4, y+8, x+6, y+8);		    g.drawLine(x+5, y+9, x+5, y+9);		    g.drawLine(x+3, y+5, x+3, y+5);		    g.drawLine(x+3, y+6, x+4, y+6);		}	    }	}	public int getIconWidth() {	    XPStyle xp = XPStyle.getXP();	    if (xp != null) {		return xp.getSkin(null, Part.BP_CHECKBOX).getWidth();	    } else {		return csize;	    }	}			public int getIconHeight() {	    XPStyle xp = XPStyle.getXP();	    if (xp != null) {		return xp.getSkin(null, Part.BP_CHECKBOX).getHeight();	    } else {		return csize;	    }	}    }    private static class RadioButtonIcon implements Icon, UIResource, Serializable    {	public void paintIcon(Component c, Graphics g, int x, int y) {	    AbstractButton b = (AbstractButton) c;	    ButtonModel model = b.getModel();	    XPStyle xp = XPStyle.getXP();	    if (xp != null) {		Part part = Part.BP_RADIOBUTTON;		Skin skin = xp.getSkin(b, part);		State state;		int index = 0;		if (model.isSelected()) {		    state = State.CHECKEDNORMAL;		    if (!model.isEnabled()) {			state = State.CHECKEDDISABLED;		    } else if (model.isPressed() && model.isArmed()) {			state = State.CHECKEDPRESSED;		    } else if (model.isRollover()) {			state = State.CHECKEDHOT;		    }		} else {		    state = State.UNCHECKEDNORMAL;		    if (!model.isEnabled()) {			state = State.UNCHECKEDDISABLED;		    } else if (model.isPressed() && model.isArmed()) {			state = State.UNCHECKEDPRESSED;		    } else if (model.isRollover()) {			state = State.UNCHECKEDHOT;		    }		}

⌨️ 快捷键说明

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