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

📄 xpspinnerbuttonui.java

📁 Swing Windows XP 外观和感觉 BeanSoft 修改版, 2003年 原始的作者: XP 外观和感觉 by Stefan Krause - http://www.stefan
💻 JAVA
字号:
// Beta
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*   XP Look and Feel                                                           *
*                                                                              *
*  (C) Copyright 2002, by Stefan Krause                                        *
*                                                                              *
*                                                                              *
*   This library is free software; you can redistribute it and/or modify it    *
*   under the terms of the GNU Lesser General Public License as published by   *
*   the Free Software Foundation; either version 2.1 of the License, or (at    *
*   your option) any later version.                                            *
*                                                                              *
*   This library 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 Lesser 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 com.stefankrause.xplookandfeel;

import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.SwingConstants;
import javax.swing.plaf.ComponentUI;

import com.stefankrause.xplookandfeel.skin.Skin;
import com.stefankrause.xplookandfeel.skin.SkinSimpleButtonIndexModel;

/**
 * A button placed in the title frame of a internal frame to enable
 * closing, iconifying and maximizing of the internal frame.
 */
public class XPSpinnerButtonUI extends XPButtonUI {
    
    int type;

	/** The only instance for this UI */
    private static final String[] files={"XPSpinnerUp.res","XPSpinnerDown.res"};
    private static final String[] arrowfiles={"XPSpinnerUpArrows.res","XPSpinnerDownArrows.res"};
    /** the index model for the window buttons */
    private static SkinSimpleButtonIndexModel indexModel=new SkinSimpleButtonIndexModel(0,1,2,4); 
    
	static Skin skins[]=new Skin[2];
    static Skin arrowSkins[]=new Skin[2];
    
	public static ComponentUI createUI(JComponent c) {
        throw new IllegalStateException("Must not be used this way.");
	}
    
    /**
     * Creates a new Spinner Button. Use either SwingConstants.SOUTH or SwingConstants.NORTH
     * for a SpinnerButton of Type up or a down.
     * @param type
     */
    XPSpinnerButtonUI(int type)
    {
        this.type=type;   
    }

    public void paint(Graphics g, JComponent c) {

        AbstractButton button = (AbstractButton) c;

        indexModel.setButton(button);
        int index=indexModel.getIndexForState();
        // Paint the spinner button
        getSkin(type).draw(g, index,  button.getWidth(),  button.getHeight());
        // Paint the arrow for the button
        getArrowSkin(type).drawCentered(g, index,  button.getWidth(),  button.getHeight());

    }    

    /**
     * returns the spinner button
     * @param type
     * @return Skin
     */
	public static Skin getSkin(int type) {
        switch (type)
        {
            case SwingConstants.NORTH:
                skins[0]=new Skin(files[0],4, 2);
                return skins[0];
            case SwingConstants.SOUTH:              
                skins[1]=new Skin(files[1],4, 2);
                return skins[1];
            default:
                throw new IllegalStateException("type must be either SwingConstants.SOUTH or SwingConstants.NORTH for XPSpinnerButton");
        }
	}
    
    /**
     * returns the spinner button's arrow
     * @param type
     * @return Skin
     */
    protected Skin getArrowSkin(int type) {
        switch (type)
        {
            case SwingConstants.NORTH:
                arrowSkins[0]=new Skin(arrowfiles[0],4, 2);
                return arrowSkins[0];
            case SwingConstants.SOUTH:              
                arrowSkins[1]=new Skin(arrowfiles[1],4, 2);
                return arrowSkins[1];
            default:
                throw new IllegalStateException("type must be either SwingConstants.SOUTH or SwingConstants.NORTH for XPSpinnerButton");
        }
    }    
    
	/**
	 * @see javax.swing.plaf.basic.BasicButtonUI#getPreferredSize(javax.swing.JComponent)
	 */
	public Dimension getPreferredSize(JComponent c) {
		return new Dimension( getSkin(type).getHsize(), getSkin(type).getVsize() );
	}


}

⌨️ 快捷键说明

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