metalborders.java

来自「java jdk 1.4的源码」· Java 代码 · 共 891 行 · 第 1/2 页

JAVA
891
字号
/* * @(#)MetalBorders.java	1.30 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.metal;import javax.swing.*;import javax.swing.border.*;import javax.swing.plaf.*;import javax.swing.plaf.basic.BasicBorders;import javax.swing.text.JTextComponent;import java.awt.Component;import java.awt.Insets;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Color;import java.awt.Dialog;import java.awt.Frame;import java.awt.Graphics;import java.awt.Window;import java.io.Serializable;/** * Factory object that can vend Borders appropriate for the metal L & F. * @author Steve Wilson * @version 1.30 01/23/03 */public class MetalBorders {    public static class Flush3DBorder extends AbstractBorder implements UIResource{        private static final Insets insets = new Insets(2, 2, 2, 2);        public void paintBorder(Component c, Graphics g, int x, int y,			  int w, int h) {            if (c.isEnabled()) {                MetalUtils.drawFlush3DBorder(g, x, y, w, h);            } else {                MetalUtils.drawDisabledBorder(g, x, y, w, h);            }        }        public Insets getBorderInsets(Component c)       {            return insets;        }        public Insets getBorderInsets(Component c, Insets newInsets) {	    newInsets.top = insets.top;	    newInsets.left = insets.left;	    newInsets.bottom = insets.bottom;	    newInsets.right = insets.right;	    return newInsets;	}	        }    public static class ButtonBorder extends AbstractBorder implements UIResource {        protected static Insets borderInsets = new Insets( 3, 3, 3, 3 );        public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {            AbstractButton button = (AbstractButton)c;	    ButtonModel model = button.getModel();	    if ( model.isEnabled() ) {                boolean isPressed = model.isPressed() && model.isArmed();                boolean isDefault = (button instanceof JButton && ((JButton)button).isDefaultButton());	        if (isPressed && isDefault) {                    MetalUtils.drawDefaultButtonPressedBorder(g, x, y, w, h);                } else if (isPressed) {                    MetalUtils.drawPressed3DBorder( g, x, y, w, h );	        } else if (isDefault) {                    MetalUtils.drawDefaultButtonBorder( g, x, y, w, h, false);                } else {                    MetalUtils.drawButtonBorder( g, x, y, w, h, false);	        }	    } else { // disabled state	        MetalUtils.drawDisabledBorder( g, x, y, w-1, h-1 );	    }        }        public Insets getBorderInsets( Component c ) {            return borderInsets;        }        public Insets getBorderInsets(Component c, Insets newInsets) {	    newInsets.top = borderInsets.top;	    newInsets.left = borderInsets.left;	    newInsets.bottom = borderInsets.bottom;	    newInsets.right = borderInsets.right;	    return newInsets;	}    }    public static class InternalFrameBorder extends AbstractBorder implements UIResource {        private static final Insets insets = new Insets(5, 5, 5, 5);        private static final int corner = 14;        public void paintBorder(Component c, Graphics g, int x, int y,			  int w, int h) {            Color background;            Color highlight;            Color shadow;            if (c instanceof JInternalFrame && ((JInternalFrame)c).isSelected()) {                background = MetalLookAndFeel.getPrimaryControlDarkShadow();	        highlight = MetalLookAndFeel.getPrimaryControlShadow();	        shadow = MetalLookAndFeel.getPrimaryControlInfo();            } else {                background = MetalLookAndFeel.getControlDarkShadow();	        highlight = MetalLookAndFeel.getControlShadow();	        shadow = MetalLookAndFeel.getControlInfo();            }              g.setColor(background);              // Draw outermost lines              g.drawLine( 1, 0, w-2, 0);              g.drawLine( 0, 1, 0, h-2);              g.drawLine( w-1, 1, w-1, h-2);              g.drawLine( 1, h-1, w-2, h-1);              // Draw the bulk of the border              for (int i = 1; i < 5; i++) {	          g.drawRect(x+i,y+i,w-(i*2)-1, h-(i*2)-1);              }              if (c instanceof JInternalFrame &&                               ((JInternalFrame)c).isResizable()) {                  g.setColor(highlight);                  // Draw the Long highlight lines                  g.drawLine( corner+1, 3, w-corner, 3);                  g.drawLine( 3, corner+1, 3, h-corner);                  g.drawLine( w-2, corner+1, w-2, h-corner);                  g.drawLine( corner+1, h-2, w-corner, h-2);                  g.setColor(shadow);                  // Draw the Long shadow lines                  g.drawLine( corner, 2, w-corner-1, 2);                  g.drawLine( 2, corner, 2, h-corner-1);                  g.drawLine( w-3, corner, w-3, h-corner-1);                  g.drawLine( corner, h-3, w-corner-1, h-3);              }          }          public Insets getBorderInsets(Component c)       {              return insets;          }          public Insets getBorderInsets(Component c, Insets newInsets) {	      newInsets.top = insets.top;	      newInsets.left = insets.left;	      newInsets.bottom = insets.bottom;	      newInsets.right = insets.right;	      return newInsets;	  }    }    /**     * Border for a Frame.     * @since 1.4     */    static class FrameBorder extends AbstractBorder implements UIResource {        private static final Insets insets = new Insets(5, 5, 5, 5);        private static final int corner = 14;        public void paintBorder(Component c, Graphics g, int x, int y,            int w, int h) {            Color background;            Color highlight;            Color shadow;            Window window = SwingUtilities.getWindowAncestor(c);            if (window != null && window.isActive()) {                background = MetalLookAndFeel.getPrimaryControlDarkShadow();                highlight = MetalLookAndFeel.getPrimaryControlShadow();                shadow = MetalLookAndFeel.getPrimaryControlInfo();            } else {                background = MetalLookAndFeel.getControlDarkShadow();                highlight = MetalLookAndFeel.getControlShadow();                shadow = MetalLookAndFeel.getControlInfo();            }            g.setColor(background);            // Draw outermost lines            g.drawLine( x+1, y+0, x+w-2, y+0);            g.drawLine( x+0, y+1, x+0, y +h-2);            g.drawLine( x+w-1, y+1, x+w-1, y+h-2);            g.drawLine( x+1, y+h-1, x+w-2, y+h-1);            // Draw the bulk of the border            for (int i = 1; i < 5; i++) {                g.drawRect(x+i,y+i,w-(i*2)-1, h-(i*2)-1);            }            if ((window instanceof Frame) && ((Frame) window).isResizable()) {                g.setColor(highlight);                // Draw the Long highlight lines                g.drawLine( corner+1, 3, w-corner, 3);                g.drawLine( 3, corner+1, 3, h-corner);                g.drawLine( w-2, corner+1, w-2, h-corner);                g.drawLine( corner+1, h-2, w-corner, h-2);                g.setColor(shadow);                // Draw the Long shadow lines                g.drawLine( corner, 2, w-corner-1, 2);                g.drawLine( 2, corner, 2, h-corner-1);                g.drawLine( w-3, corner, w-3, h-corner-1);                g.drawLine( corner, h-3, w-corner-1, h-3);            }        }        public Insets getBorderInsets(Component c)       {            return insets;        }    	          public Insets getBorderInsets(Component c, Insets newInsets)         {            newInsets.top = insets.top;            newInsets.left = insets.left;            newInsets.bottom = insets.bottom;            newInsets.right = insets.right;            return newInsets;        }    }    /**     * Border for a Frame.     * @since 1.4     */    static class DialogBorder extends AbstractBorder implements UIResource     {		        private static final Insets insets = new Insets(5, 5, 5, 5);        private static final int corner = 14;        protected Color getActiveBackground()        {            return MetalLookAndFeel.getPrimaryControlDarkShadow();        }        protected Color getActiveHighlight()        {            return MetalLookAndFeel.getPrimaryControlShadow();        }        protected Color getActiveShadow()        {            return MetalLookAndFeel.getPrimaryControlInfo();        }        protected Color getInactiveBackground()        {            return MetalLookAndFeel.getControlDarkShadow();        }        protected Color getInactiveHighlight()        {            return MetalLookAndFeel.getControlShadow();        }        protected Color getInactiveShadow()        {            return MetalLookAndFeel.getControlInfo();        }        public void paintBorder(Component c, Graphics g, int x, int y, int w, int h)         {            Color background;            Color highlight;            Color shadow;            Window window = SwingUtilities.getWindowAncestor(c);            if (window != null && window.isActive()) {                background = getActiveBackground();                highlight = getActiveHighlight();                shadow = getActiveShadow();            } else {                background = getInactiveBackground();                highlight = getInactiveHighlight();                shadow = getInactiveShadow();            }            g.setColor(background);            // Draw outermost lines            g.drawLine( x + 1, y + 0, x + w-2, y + 0);            g.drawLine( x + 0, y + 1, x + 0, y + h - 2);            g.drawLine( x + w - 1, y + 1, x + w - 1, y + h - 2);            g.drawLine( x + 1, y + h - 1, x + w - 2, y + h - 1);            // Draw the bulk of the border            for (int i = 1; i < 5; i++) {                g.drawRect(x+i,y+i,w-(i*2)-1, h-(i*2)-1);            }            if ((window instanceof Dialog) && ((Dialog) window).isResizable()) {                g.setColor(highlight);                // Draw the Long highlight lines                g.drawLine( corner+1, 3, w-corner, 3);                g.drawLine( 3, corner+1, 3, h-corner);                g.drawLine( w-2, corner+1, w-2, h-corner);                g.drawLine( corner+1, h-2, w-corner, h-2);                g.setColor(shadow);                // Draw the Long shadow lines                g.drawLine( corner, 2, w-corner-1, 2);                g.drawLine( 2, corner, 2, h-corner-1);                g.drawLine( w-3, corner, w-3, h-corner-1);                g.drawLine( corner, h-3, w-corner-1, h-3);            }                    }        public Insets getBorderInsets(Component c)       {            return insets;        }        public Insets getBorderInsets(Component c, Insets newInsets)         {            newInsets.top = insets.top;            newInsets.left = insets.left;            newInsets.bottom = insets.bottom;            newInsets.right = insets.right;            return newInsets;        }    }    /**     * Border for an Error Dialog.     * @since 1.4     */    static class ErrorDialogBorder extends DialogBorder implements UIResource    {        protected Color getActiveBackground() {            return UIManager.getColor("OptionPane.errorDialog.border.background");        }    }        /**     * Border for a QuestionDialog.  Also used for a JFileChooser and a      * JColorChooser..     * @since 1.4     */    static class QuestionDialogBorder extends DialogBorder implements UIResource    {        protected Color getActiveBackground() {            return UIManager.getColor("OptionPane.questionDialog.border.background");        }    }        /**     * Border for a Warning Dialog.     * @since 1.4     */    static class WarningDialogBorder extends DialogBorder implements UIResource    {        protected Color getActiveBackground() {            return UIManager.getColor("OptionPane.warningDialog.border.background");        }    }        /**     * Border for a Palette.     * @since 1.3     */    public static class PaletteBorder extends AbstractBorder implements UIResource {        private static final Insets insets = new Insets(1, 1, 1, 1);        int titleHeight = 0;        public void paintBorder( Component c, Graphics g, int x, int y, int w, int h ) {  	    g.translate(x,y);  	    g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow());	    g.drawLine(0, 1, 0, h-2);	    g.drawLine(1, h-1, w-2, h-1);	    g.drawLine(w-1,  1, w-1, h-2);	    g.drawLine( 1, 0, w-2, 0);	    g.drawRect(1,1, w-3, h-3);	    g.translate(-x,-y);      	}        public Insets getBorderInsets(Component c)       {            return insets;        }        public Insets getBorderInsets(Component c, Insets newInsets) {	    newInsets.top = insets.top;	    newInsets.left = insets.left;	    newInsets.bottom = insets.bottom;	    newInsets.right = insets.right;	    return newInsets;	}    }    public static class OptionDialogBorder extends AbstractBorder implements UIResource {        private static final Insets insets = new Insets(3, 3, 3, 3);        int titleHeight = 0;        public void paintBorder( Component c, Graphics g, int x, int y, int w, int h ) {  	    g.translate(x,y);              int messageType = JOptionPane.PLAIN_MESSAGE;            if (c instanceof JInternalFrame) {                Object obj = ((JInternalFrame) c).getClientProperty(                              "JInternalFrame.messageType");                 if (obj != null && (obj instanceof Integer)) {                    messageType = ((Integer) obj).intValue();                }            }            Color borderColor;	    switch (messageType) {            case(JOptionPane.ERROR_MESSAGE):                borderColor = UIManager.getColor(                    "OptionPane.errorDialog.border.background");                break;            case(JOptionPane.QUESTION_MESSAGE):                borderColor = UIManager.getColor(                    "OptionPane.questionDialog.border.background");                break;            case(JOptionPane.WARNING_MESSAGE):                borderColor = UIManager.getColor(                    "OptionPane.warningDialog.border.background");                break;            case(JOptionPane.INFORMATION_MESSAGE):            case(JOptionPane.PLAIN_MESSAGE):            default:                borderColor = MetalLookAndFeel.getPrimaryControlDarkShadow();                break;	    }

⌨️ 快捷键说明

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