windowsiconfactory.java
来自「java jdk 1.4的源码」· Java 代码 · 共 515 行
JAVA
515 行
/* * @(#)WindowsIconFactory.java 1.19 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 javax.swing.*;import javax.swing.plaf.UIResource;import java.awt.*;import java.io.Serializable;/** * 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.19 01/23/03 * @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; 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; } public static Icon createFrameCloseIcon() { if (frame_closeIcon == null) { frame_closeIcon = new FrameButtonIcon("window.closebutton"); } return frame_closeIcon; } public static Icon createFrameIconifyIcon() { if (frame_iconifyIcon == null) { frame_iconifyIcon = new FrameButtonIcon("window.minbutton"); } return frame_iconifyIcon; } public static Icon createFrameMaximizeIcon() { if (frame_maxIcon == null) { frame_maxIcon = new FrameButtonIcon("window.maxbutton"); } return frame_maxIcon; } public static Icon createFrameMinimizeIcon() { if (frame_minIcon == null) { frame_minIcon = new FrameButtonIcon("window.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 int classicHeight = 16; private int classicWidth = 14; private String category; private FrameButtonIcon(String category) { this.category = category; } public void paintIcon(Component c, Graphics g, int x, int y) { XPStyle xp = XPStyle.getXP(); if (xp != null) { XPStyle.Skin skin = xp.getSkin(category); JButton b = (JButton)c; ButtonModel model = b.getModel(); int index = 0; if (!model.isEnabled()) { index = 3; } else if (model.isArmed() && model.isPressed()) { index = 2; } else if (model.isRollover()) { index = 1; } // Find out if frame is inactive JInternalFrame jif = (JInternalFrame)SwingUtilities. getAncestorOfClass(JInternalFrame.class, b); if (jif != null && !jif.isSelected()) { index += 4; } skin.paintSkin(g, 0, 0, index); } else if (category.equals("window.closebutton")) { g.setColor(Color.black); g.drawLine(4, 3, 10, 9); g.drawLine(5, 3, 11, 9); g.drawLine(10, 3, 4, 9); g.drawLine(11, 3, 5, 9); } else if (category.equals("window.minbutton")) { g.setColor(Color.black); g.drawRect(4, 9, 6, 1); } else if (category.equals("window.maxbutton")) { g.setColor(Color.black); g.drawRect(3, 2, 8, 8); g.drawLine(3, 3, 11, 3); } else if (category.equals("window.restorebutton")) { g.setColor(Color.black); g.drawRect(5, 2, 5, 5); g.drawLine(5, 3, 10, 3); g.drawRect(3, 5, 5, 5); g.drawLine(3, 6, 7, 6); g.setColor(UIManager.getColor("InternalFrame.minimizeIconBackground")); g.fillRect(4, 7, 4, 3); } } public int getIconWidth() { XPStyle xp = XPStyle.getXP(); if (xp != null) { return xp.getSkin(category).getWidth(); } else { return classicWidth; } } public int getIconHeight() { XPStyle xp = XPStyle.getXP(); if (xp != null) { return xp.getSkin(category).getHeight(); } else { return classicHeight; } } } 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) { int index = 0; if (!model.isEnabled()) { index = 3; // disabled } else if (model.isPressed() && model.isArmed()) { index = 2; // pressed } else if (model.isRollover()) { index = 1; // rollover } if (model.isSelected()) { index += 4; } xp.getSkin("button.checkbox").paintSkin(g, x, y, index); } 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.darkShadow")); } 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("button.checkbox").getWidth(); } else { return csize; } } public int getIconHeight() { XPStyle xp = XPStyle.getXP(); if (xp != null) { return xp.getSkin("button.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) { XPStyle.Skin skin = xp.getSkin("button.radiobutton"); int index = 0; if (!model.isEnabled()) { index = 3; // disabled } else if (model.isPressed() && model.isArmed()) { index = 2; // pressed } else if (model.isRollover()) { index = 1; // rollover } if (model.isSelected()) { index += 4; } skin.paintSkin(g, x, y, index); } else { // fill interior if((model.isPressed() && model.isArmed()) || !model.isEnabled()) { g.setColor(UIManager.getColor("RadioButton.background")); } else { g.setColor(UIManager.getColor("RadioButton.interiorBackground")); } g.fillRect(x+2, y+2, 8, 8); // outter left arc g.setColor(UIManager.getColor("RadioButton.shadow")); g.drawLine(x+4, y+0, x+7, y+0); g.drawLine(x+2, y+1, x+3, y+1); g.drawLine(x+8, y+1, x+9, y+1); g.drawLine(x+1, y+2, x+1, y+3); g.drawLine(x+0, y+4, x+0, y+7); g.drawLine(x+1, y+8, x+1, y+9); // outter right arc g.setColor(UIManager.getColor("RadioButton.highlight")); g.drawLine(x+2, y+10, x+3, y+10); g.drawLine(x+4, y+11, x+7, y+11); g.drawLine(x+8, y+10, x+9, y+10); g.drawLine(x+10, y+9, x+10, y+8); g.drawLine(x+11, y+7, x+11, y+4); g.drawLine(x+10, y+3, x+10, y+2); // inner left arc g.setColor(UIManager.getColor("RadioButton.darkShadow")); g.drawLine(x+4, y+1, x+7, y+1); g.drawLine(x+2, y+2, x+3, y+2); g.drawLine(x+8, y+2, x+9, y+2); g.drawLine(x+2, y+3, x+2, y+3); g.drawLine(x+1, y+4, x+1, y+7); g.drawLine(x+2, y+8, x+2, y+8); // inner right arc g.setColor(UIManager.getColor("RadioButton.light")); g.drawLine(x+2, y+9, x+3, y+9); g.drawLine(x+4, y+10, x+7, y+10); g.drawLine(x+8, y+9, x+9, y+9); g.drawLine(x+9, y+8, x+9, y+8); g.drawLine(x+10, y+7, x+10, y+4); g.drawLine(x+9, y+3, x+9, y+3); // indicate whether selected or not if(model.isSelected()) { g.setColor(UIManager.getColor("RadioButton.darkShadow")); g.fillRect(x+4, y+5, 4, 2); g.fillRect(x+5, y+4, 2, 4); } } } public int getIconWidth() { XPStyle xp = XPStyle.getXP(); if (xp != null) { return xp.getSkin("button.radiobutton").getWidth(); } else { return 13; } } public int getIconHeight() { XPStyle xp = XPStyle.getXP(); if (xp != null) { return xp.getSkin("button.radiobutton").getHeight(); } else { return 13; } } } // end class RadioButtonIcon private static class CheckBoxMenuItemIcon implements Icon, UIResource, Serializable { public void paintIcon(Component c, Graphics g, int x, int y) { AbstractButton b = (AbstractButton) c; ButtonModel model = b.getModel(); boolean isSelected = model.isSelected(); if (isSelected) { y = y - getIconHeight() / 2; 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() { return 9; } public int getIconHeight() { return 9; } } // End class CheckBoxMenuItemIcon private static class RadioButtonMenuItemIcon implements Icon, UIResource, Serializable { public void paintIcon(Component c, Graphics g, int x, int y) { AbstractButton b = (AbstractButton) c; ButtonModel model = b.getModel(); if (b.isSelected() == true) { g.fillArc(0,0,getIconWidth()-2, getIconHeight()-2, 0, 360); } } public int getIconWidth() { return 12; } public int getIconHeight() { return 12; } } // End class RadioButtonMenuItemIcon private static class MenuItemCheckIcon implements Icon, UIResource, Serializable{ public void paintIcon(Component c, Graphics g, int x, int y) { /* For debugging: Color oldColor = g.getColor(); g.setColor(Color.orange); g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true); g.setColor(oldColor); */ } public int getIconWidth() { return 9; } public int getIconHeight() { return 9; } } // End class MenuItemCheckIcon private static class MenuItemArrowIcon implements Icon, UIResource, Serializable { public void paintIcon(Component c, Graphics g, int x, int y) { /* For debugging: Color oldColor = g.getColor(); g.setColor(Color.green); g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true); g.setColor(oldColor); */ } public int getIconWidth() { return 4; } public int getIconHeight() { return 8; } } // End class MenuItemArrowIcon private static class MenuArrowIcon implements Icon, UIResource, Serializable { public void paintIcon(Component c, Graphics g, int x, int y) { g.translate(x,y); if( WindowsUtils.isLeftToRight(c) ) { g.drawLine( 0, 0, 0, 7 ); g.drawLine( 1, 1, 1, 6 ); g.drawLine( 2, 2, 2, 5 ); g.drawLine( 3, 3, 3, 4 ); } else { g.drawLine( 4, 0, 4, 7 ); g.drawLine( 3, 1, 3, 6 ); g.drawLine( 2, 2, 2, 5 ); g.drawLine( 1, 3, 1, 4 ); } g.translate(-x,-y); } public int getIconWidth() { return 4; } public int getIconHeight() { return 8; } } // End class MenuArrowIcon}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?