⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gradientlabel.java

📁 eq跨平台查询工具源码 eq跨平台查询工具源码
💻 JAVA
字号:
/* * GradientLabel.java * * Copyright (C) 2002, 2003, 2004, 2005, 2006 Takis Diakoumis * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. * */package org.underworldlabs.swing;import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Composite;import java.awt.Dimension;import java.awt.Font;import java.awt.FontMetrics;import java.awt.GradientPaint;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Insets;import java.awt.Paint;import java.awt.RenderingHints;import javax.swing.ImageIcon;import javax.swing.JComponent;import javax.swing.UIManager;import org.underworldlabs.swing.plaf.UIUtils;/* ---------------------------------------------------------- * CVS NOTE: Changes to the CVS repository prior to the  *           release of version 3.0.0beta1 has meant a  *           resetting of CVS revision numbers. * ---------------------------------------------------------- *//** * * @author   Takis Diakoumis * @version  $Revision: 1.7 $ * @date     $Date: 2006/07/09 14:34:51 $ */public class GradientLabel extends JComponent {        /** The text to be displayed */    private String text;        /** The font */    private Font font;        /** the image icon displayed */    private ImageIcon icon;        /** The component's left-hand gradient colour */    private Color leftGradientColor;    /** The component's right-hand gradient colour */    private Color rightGradientColor;        /** The text label foreground colour */    private Color foregroundColor;        /** indicates that a shadow should be dropped on the text */    private boolean shadowDropped;        /** The component's insets */    private static Insets insets;        /** the default font size - 14pts */    public static final int DEFAULT_FONT_SIZE = 14;        /**      * Creates a new instance with default component settings.     */    public GradientLabel() {        this("", null, new Font("dialog", Font.BOLD, DEFAULT_FONT_SIZE));    }    /**     * Creates a new instance with the specified text, icon and font.     *     * @param text - the label text     * @param icon - the label image icon     * @param font - the label font     */    public GradientLabel(String text, ImageIcon icon, Font font) {        this(text, icon, font, null, null);    }        public GradientLabel(String text, ImageIcon icon, Font font,                          Color leftGradientColor, Color rightGradientColor) {        this(text, icon, font, leftGradientColor, rightGradientColor, null, false);    }    public GradientLabel(String text, ImageIcon icon, Font font,                          Color leftGradientColor, Color rightGradientColor,                         Color foregroundColor, boolean shadowDropped) {        this.text = text;        this.icon = icon;        this.font = font;        this.setLeftGradientColor(leftGradientColor);        this.setRightGradientColor(rightGradientColor);        this.shadowDropped = shadowDropped;                if (foregroundColor == null) {            if (!UIUtils.isWindowsLookAndFeel()) {                foregroundColor = Color.WHITE;            } else {                if (leftGradientColor == null) {                    leftGradientColor = getLeftGradientColor();                }                foregroundColor = UIUtils.getInverse(leftGradientColor).darker();            }        }        setForeground(foregroundColor);    }/*    public GradientLabel(String text, ImageIcon icon, int fontSize,                          Color foreground, int fontStyle) {                if (text != null) {            this.text = text;        }                font = new Font("dialog", fontStyle, fontSize);                if (insets == null) {            insets = new Insets(3,2,3,2);        }        label = new JLabel(text);        label.setFont(font);                /*                if (!UIUtils.isWindowsLookAndFeel()) {            label.setForeground(foreground);        } else {            label.setForeground(UIManager.getColor("TitledBorder.titleColor"));        }        * /        if (icon != null) {            label.setIcon(icon);        }                //leftGradientColor = UIManager.getColor("controlShadow");        //rightGradientColor = UIManager.getColor("control");                if (leftGradientColor == null) {            //leftGradientColor = UIManager.getColor("InternalFrame.activeTitleBackground");            leftGradientColor = UIUtils.getDefaultActiveBackgroundColour();        }                if (rightGradientColor == null) {            rightGradientColor = UIUtils.getDefaultInactiveBackgroundColour();                    //UIManager.getColor("InternalFrame.inactiveTitleBackground");        }        if (!UIUtils.isWindowsLookAndFeel()) {            label.setForeground(foreground);        } else {            label.setForeground(UIUtils.getInverse(leftGradientColor).darker());            //label.setForeground(UIManager.getColor("TitledBorder.titleColor"));        }                setLayout(new FlowLayout(FlowLayout.LEFT, 5, 3));        add(label);    }    */    /**      * Overides to return <code>true</code>.     *     * @return <code>true</code>     */    public boolean isOpaque() {        return true;    }    /**     * Returns the component's inset margin.     *     * @return the insets     */    public Insets getInsets() {        if (insets == null) {            insets = new Insets(3,2,3,2);        }        return insets;    }        /**     * Returns the label text foreground colour.     *     * @return the label foreground colour     */    public Color getForeground() {        return foregroundColor;    }        /**     * Returns the label text font.     *     * @return the font     */    public Font getFont() {        if (font == null) {            return super.getFont();        }        return font;    }        /**      * Performs the painting for this component.     *     * @param the <code>Graphics</code> object to     *         perform the painting     */    protected void paintComponent(Graphics g) {        super.paintComponent(g);                int width = getWidth();        int height = getHeight();                Graphics2D g2 = (Graphics2D)g;        // draw the gradient background        Color color1 = getLeftGradientColor();        Color color2 = getRightGradientColor();        if (color1 != null && color2 != null) {            Paint paint = g2.getPaint();            GradientPaint fade = new GradientPaint(0, 0, color1,                                     (int)(width * 0.9), 0, color2);            g2.setPaint(fade);            g2.fillRect(0,0, width, height);            g2.setPaint(paint);        }                Color lineColour = getSeparatorColour();        if (lineColour != null) {            g2.setColor(lineColour);            g2.drawLine(0, 0,  width, 0);        }        // draw the icon and text        Insets _insets = getInsets();        int x = _insets.left + 5;        int y = _insets.top + 1;        if (icon != null) {            icon.paintIcon(this, g2, x, y);            x += icon.getIconWidth() + 10;        }        if (text != null) {            Font _font = getFont();            g2.setFont(_font);            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,                RenderingHints.VALUE_ANTIALIAS_ON);            FontMetrics metrics = getFontMetrics(_font);            int fontHeight = metrics.getHeight();            y = ((height - fontHeight) / 2) + fontHeight - 2;                        if (isShadowDropped()) {                Composite composite = g2.getComposite();                g2.setComposite(                        AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));                g2.setColor(Color.BLACK);                g2.drawString(text, x+2, y+2);                g2.setComposite(composite);            }            g2.setColor(getForeground());            g2.drawString(text, x, y);                    }    }        /**      * Returns the colour of the top border line.     * This is the only border line painted by the component.     * The default value returned is the value retrieved from     * <code>UIManager.getColor("controlShadow")</code>.     * <br>Override to return null and not have the line painted.     *     * @return the top-line separator colour     */    public Color getSeparatorColour() {        return UIManager.getColor("controlShadow");    }        public Dimension getPreferredSize() {        return new Dimension(getWidth(), getHeight());    }        /** the label height */    private int height;        /**      * Calculates the height based on the font and icon size specified.     *     * @return the component's height     */    public int getHeight() {        if (height == 0) {            Insets _insets = getInsets();            height = _insets.top + _insets.bottom;            // check icon height            int iconHeight = 0;            if (icon != null) {                iconHeight = icon.getIconHeight();            }                        // get font height            FontMetrics metrics = getFontMetrics(getFont());            int fontHeight = metrics.getHeight();            height += Math.max(iconHeight, fontHeight) + 2;        }        return height;    }        public void setIcon(ImageIcon icon) {        this.icon = icon;    }        /**     * Returns the right hand gradient colour.     * If this is null, the default colour used is retrieved using     * <code>UIUtils.getDefaultInactiveBackgroundColour()</code> and     * is usually the unmodified component brackground.     *     * @return the right-hand gradient colour     */    public Color getRightGradientColor() {        if (rightGradientColor == null) {            setRightGradientColor(UIUtils.getDefaultInactiveBackgroundColour());        }        return rightGradientColor;    }    /**     * Returns the right hand gradient colour.     * If this is null, the default colour used is retrieved using     * <code>UIUtils.getDefaultActiveBackgroundColour()</code>.     *     * @return the left-hand gradient colour     */    public Color getLeftGradientColor() {        if (leftGradientColor == null) {            setLeftGradientColor(UIUtils.getDefaultActiveBackgroundColour());        }        return leftGradientColor;    }        public void setText(String _text) {        String oldValue = text;                if (_text == null) {            text = "";        } else {            text = _text;        }        firePropertyChange("text", oldValue, text);                if (oldValue == null || !text.equals(oldValue)) {            revalidate();            repaint();        }            }        /**      * Returns the text string that this component displays.     *     * @return the text displayed     */    public String getText() {        return text;    }    public boolean isShadowDropped() {        return shadowDropped;    }    public void setShadowDropped(boolean shadowDropped) {        this.shadowDropped = shadowDropped;    }    public void setLeftGradientColor(Color leftGradientColor) {        this.leftGradientColor = leftGradientColor;    }    public void setRightGradientColor(Color rightGradientColor) {        this.rightGradientColor = rightGradientColor;    }    public void setForeground(Color foregroundColor) {        super.setForeground(foregroundColor);        this.foregroundColor = foregroundColor;    }    }

⌨️ 快捷键说明

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