tabpanelui.java

来自「开源项目openfire的完整源程序」· Java 代码 · 共 234 行

JAVA
234
字号
/**
 * $Revision: $
 * $Date: $
 *
 * Copyright (C) 2006 Jive Software. All rights reserved.
 *
 * This software is published under the terms of the GNU Lesser Public License (LGPL),
 * a copy of which is included in this distribution.
 */

package org.jivesoftware.spark.component.tabbedPane;


import org.jivesoftware.Spark;
import org.jivesoftware.resource.Default;
import org.jivesoftware.spark.util.log.Log;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.util.StringTokenizer;

import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicPanelUI;

/**
 * Represents a single instance of a Tab Paint Component.
 *
 * @author Derek DeMoro
 */
public class TabPanelUI extends BasicPanelUI {
    private Color backgroundColor = new Color(0, 0, 0, 0);

    private boolean selected;
    private boolean hideBorder;

    private int placement = JTabbedPane.TOP;


    private Color fillerColor;
    private Color border;

    // ------------------------------------------------------------------------------------------------------------------
    //  Custom installation methods
    // ------------------------------------------------------------------------------------------------------------------

    protected void installDefaults(JPanel p) {
        p.setOpaque(false);
    }

    public void setSelected(boolean selected) {
        if (selected) {
            backgroundColor = getSelectedEndColor();
        }
        else {
            backgroundColor = new Color(0, 0, 0, 0);
        }

        this.selected = selected;
    }

    // ------------------------------------------------------------------------------------------------------------------
    //  Custom painting methods
    // ------------------------------------------------------------------------------------------------------------------

    public void paint(Graphics g, JComponent c) {
        Color borderColor = getBorderColor();
        Graphics2D g2d = (Graphics2D)g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        Insets vInsets = c.getInsets();

        int w = c.getWidth() - (vInsets.left + vInsets.right);
        int h = c.getHeight() - (vInsets.top + vInsets.bottom);

        int x = vInsets.left;
        int y = vInsets.top;
        int arc = 8;


        Shape vOldClip = g.getClip();


        Color endColor;

        if (selected) {
            endColor = new Color(152, 193, 234);
        }
        else {
            endColor = Color.white;
        }

        GradientPaint paint = new GradientPaint(0, 0, Color.white, 0, h, endColor, true);
        g2d.setPaint(paint);
        g2d.fillRect(x, y, w, h);

        g2d.setClip(vOldClip);
        GradientPaint vPaint = new GradientPaint(x, y, borderColor, x, y + h, borderColor);
        g2d.setPaint(vPaint);

        // Handle custom actions.
        if (placement == JTabbedPane.TOP) {
            if (selected) {
                g2d.setColor(borderColor);
                g2d.drawRect(x, y, w, h);
            }
        }
        else {
            if (selected) {
                g2d.setColor(borderColor);
                g2d.drawLine(w - 1, 0, w - 1, h);
                g2d.drawLine(x, y, x, h);
                g2d.drawLine(0, h - 1, w - 1, h - 1);
            }
        }

        if (selected) {
            // Draw border on right side.
            g2d.setColor(borderColor);
            g2d.drawLine(w - 1, 0, w - 1, h);
        }
        else if (!hideBorder) {
            // Draw border on right side.
            g2d.setColor(borderColor);
            g2d.drawLine(w - 1, 4, w - 1, h - 4);
        }
    }


    public void setHideBorder(boolean hide) {
        hideBorder = hide;
    }


    private Color getSelectedStartColor() {
        Color uiStartColor = (Color)UIManager.get("SparkTabbedPane.startColor");
        if (uiStartColor != null) {
            return uiStartColor;
        }

        if (Spark.isCustomBuild()) {
            String end = Default.getString(Default.CONTACT_GROUP_END_COLOR);
            return getColor(end);
        }
        else {
            return new Color(193, 216, 248);
        }
    }


    private Color getSelectedEndColor() {
        if (fillerColor != null) {
            return fillerColor;
        }

        Color uiEndColor = (Color)UIManager.get("SparkTabbedPane.endColor");
        if (uiEndColor != null) {
            return uiEndColor;
        }

        if (Spark.isCustomBuild()) {
            String end = Default.getString(Default.CONTACT_GROUP_END_COLOR);
            return getColor(end);
        }
        else {
            return new Color(180, 207, 247);
        }
    }

    private Color getBorderColor() {
        if (border != null) {
            return border;
        }

        Color color = (Color)UIManager.get("SparkTabbedPane.borderColor");
        if (color != null) {
            return color;
        }

        if (Spark.isCustomBuild()) {
            String end = Default.getString(Default.CONTACT_GROUP_END_COLOR);
            return getColor(end);
        }
        else {
            return Color.lightGray;
        }
    }


    private static Color getColor(String commaColorString) {
        Color color = null;
        try {
            color = null;

            StringTokenizer tkn = new StringTokenizer(commaColorString, ",");
            color = new Color(Integer.parseInt(tkn.nextToken()), Integer.parseInt(tkn.nextToken()), Integer.parseInt(tkn.nextToken()));
        }
        catch (NumberFormatException e1) {
            Log.error(e1);
            return Color.white;
        }
        return color;
    }

    public void setPlacement(int placement) {
        this.placement = placement;
    }


    public Color getFillerColor() {
        return fillerColor;
    }

    public void setFillerColor(Color fillerColor) {
        this.fillerColor = fillerColor;
    }

    public Color getBorder() {
        return border;
    }

    public void setBorder(Color border) {
        this.border = border;
    }
}

⌨️ 快捷键说明

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