windowsiconfactory.java
来自「JAVA 所有包」· Java 代码 · 共 888 行 · 第 1/2 页
JAVA
888 行
skin.paintSkin(g, x, y, state); } 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()) { if (model.isEnabled()) { g.setColor(UIManager.getColor("RadioButton.foreground")); } else { g.setColor(UIManager.getColor("RadioButton.shadow")); } 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(null, Part.BP_RADIOBUTTON).getWidth(); } else { return 13; } } public int getIconHeight() { XPStyle xp = XPStyle.getXP(); if (xp != null) { return xp.getSkin(null, Part.BP_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.fillRoundRect(x+3,y+3, getIconWidth()-6, getIconHeight()-6, 4, 4); } } 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) { if (WindowsMenuItemUI.isVistaPainting()) { XPStyle xp = XPStyle.getXP(); State state = State.NORMAL; if (c instanceof JMenuItem) { state = ((JMenuItem) c).getModel().isEnabled() ? State.NORMAL : State.DISABLED; } Skin skin = xp.getSkin(c, Part.MP_POPUPSUBMENU); if (WindowsGraphicsUtils.isLeftToRight(c)) { skin.paintSkin(g, x, y, state); } else { Graphics2D g2d = (Graphics2D)g.create(); g2d.translate(x + skin.getWidth(), y); g2d.scale(-1, 1); skin.paintSkin(g2d, 0, 0, state); g2d.dispose(); } } else { g.translate(x,y); if( WindowsGraphicsUtils.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() { if (WindowsMenuItemUI.isVistaPainting()) { Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU); return skin.getWidth(); } else { return 4; } } public int getIconHeight() { if (WindowsMenuItemUI.isVistaPainting()) { Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU); return skin.getHeight(); } else { return 8; } } } // End class MenuArrowIcon static class VistaMenuItemCheckIconFactory implements MenuItemCheckIconFactory { private static final int OFFSET = 3; public Icon getIcon(JMenuItem component) { return new VistaMenuItemCheckIcon(component); } public boolean isCompatible(Object icon, String prefix) { return icon instanceof VistaMenuItemCheckIcon && ((VistaMenuItemCheckIcon) icon).type == getType(prefix); } public Icon getIcon(String type) { return new VistaMenuItemCheckIcon(type); } static int getIconWidth() { return XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK).getWidth() + 2 * OFFSET; } private static Class<? extends JMenuItem> getType(Component c) { Class<? extends JMenuItem> rv = null; if (c instanceof JCheckBoxMenuItem) { rv = JCheckBoxMenuItem.class; } else if (c instanceof JRadioButtonMenuItem) { rv = JRadioButtonMenuItem.class; } else if (c instanceof JMenu) { rv = JMenu.class; } else if (c instanceof JMenuItem) { rv = JMenuItem.class; } return rv; } private static Class<? extends JMenuItem> getType(String type) { Class<? extends JMenuItem> rv = null; if (type == "CheckBoxMenuItem") { rv = JCheckBoxMenuItem.class; } else if (type == "RadioButtonMenuItem") { rv = JRadioButtonMenuItem.class; } else if (type == "Menu") { rv = JMenu.class; } else if (type == "MenuItem") { rv = JMenuItem.class; } else { // this should never happen rv = JMenuItem.class; } return rv; } /** * CheckIcon for JMenuItem, JMenu, JCheckBoxMenuItem and * JRadioButtonMenuItem. * Note: to be used on Vista only. */ private static class VistaMenuItemCheckIcon implements Icon, UIResource, Serializable { private final JMenuItem menuItem; private final Class<? extends JMenuItem> type; VistaMenuItemCheckIcon(JMenuItem menuItem) { this.type = getType(menuItem); this.menuItem = menuItem; } VistaMenuItemCheckIcon(String type) { this.type = getType(type); this.menuItem = null; } public int getIconHeight() { Icon lafIcon = getLaFIcon(); if (lafIcon != null) { return lafIcon.getIconHeight(); } Icon icon = getIcon(); int height = 0; if (icon != null) { height = icon.getIconHeight() + 2 * OFFSET; } else { Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK); height = skin.getHeight() + 2 * OFFSET; } return height; } public int getIconWidth() { Icon lafIcon = getLaFIcon(); if (lafIcon != null) { return lafIcon.getIconWidth(); } Icon icon = getIcon(); int width = 0; if (icon != null) { width = icon.getIconWidth() + 2 * OFFSET; } else { width = VistaMenuItemCheckIconFactory.getIconWidth(); } return width; } public void paintIcon(Component c, Graphics g, int x, int y) { Icon lafIcon = getLaFIcon(); if (lafIcon != null) { lafIcon.paintIcon(c, g, x, y); return; } assert menuItem == null || c == menuItem; Icon icon = getIcon(); if (type == JCheckBoxMenuItem.class || type == JRadioButtonMenuItem.class) { AbstractButton b = (AbstractButton) c; if (b.isSelected()) { Part backgroundPart = Part.MP_POPUPCHECKBACKGROUND; Part part = Part.MP_POPUPCHECK; State backgroundState; State state; if (isEnabled(c, null)) { backgroundState = (icon != null) ? State.BITMAP : State.NORMAL; state = (type == JRadioButtonMenuItem.class) ? State.BULLETNORMAL : State.CHECKMARKNORMAL; } else { backgroundState = State.DISABLEDPUSHED; state = (type == JRadioButtonMenuItem.class) ? State.BULLETDISABLED : State.CHECKMARKDISABLED; } Skin skin; XPStyle xp = XPStyle.getXP(); skin = xp.getSkin(c, backgroundPart); skin.paintSkin(g, x, y, getIconWidth(), getIconHeight(), backgroundState); if (icon == null) { skin = xp.getSkin(c, part); skin.paintSkin(g, x + OFFSET, y + OFFSET, state); } } } if (icon != null) { icon.paintIcon(c, g, x + OFFSET, y + OFFSET); } } private static WindowsMenuItemUIAccessor getAccessor( JMenuItem menuItem) { WindowsMenuItemUIAccessor rv = null; ButtonUI uiObject = (menuItem != null) ? menuItem.getUI() : null; if (uiObject instanceof WindowsMenuItemUI) { rv = ((WindowsMenuItemUI) uiObject).accessor; } else if (uiObject instanceof WindowsMenuUI) { rv = ((WindowsMenuUI) uiObject).accessor; } else if (uiObject instanceof WindowsCheckBoxMenuItemUI) { rv = ((WindowsCheckBoxMenuItemUI) uiObject).accessor; } else if (uiObject instanceof WindowsRadioButtonMenuItemUI) { rv = ((WindowsRadioButtonMenuItemUI) uiObject).accessor; } return rv; } private static boolean isEnabled(Component c, State state) { if (state == null && c instanceof JMenuItem) { WindowsMenuItemUIAccessor accessor = getAccessor((JMenuItem) c); if (accessor != null) { state = accessor.getState((JMenuItem) c); } } if (state == null) { if (c != null) { return c.isEnabled(); } else { return true; } } else { return (state != State.DISABLED) && (state != State.DISABLEDHOT) && (state != State.DISABLEDPUSHED); } } private Icon getIcon() { Icon rv = null; if (menuItem == null) { return rv; } WindowsMenuItemUIAccessor accessor = getAccessor(menuItem); State state = (accessor != null) ? accessor.getState(menuItem) : null; if (isEnabled(menuItem, null)) { if (state == State.PUSHED) { rv = menuItem.getPressedIcon(); } else { rv = menuItem.getIcon(); } } else { rv = menuItem.getDisabledIcon(); } return rv; } /** * Check if developer changed icon in the UI table. * * @return the icon to use or {@code null} if the current one is to * be used */ private Icon getLaFIcon() { // use icon from the UI table if it does not match this one. Icon rv = (Icon) UIManager.getDefaults().get(typeToString(type)); if (rv instanceof VistaMenuItemCheckIcon && ((VistaMenuItemCheckIcon) rv).type == type) { rv = null; } return rv; } private static String typeToString( Class<? extends JMenuItem> type) { assert type == JMenuItem.class || type == JMenu.class || type == JCheckBoxMenuItem.class || type == JRadioButtonMenuItem.class; StringBuilder sb = new StringBuilder(type.getName()); // remove package name, dot and the first character sb.delete(0, sb.lastIndexOf("J") + 1); sb.append(".checkIcon"); return sb.toString(); } } } // End class VistaMenuItemCheckIconFactory}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?