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

📄 xpsliderui.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.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.JSlider;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicSliderUI;
import javax.swing.plaf.metal.MetalSliderUI;

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


public class XPSliderUI extends MetalSliderUI {
	/** the skin for the horizontal thumb*/
	private static Skin skinThumbHoriz;
	/** the skin for the vertical thumb*/
	private static Skin skinThumbVert;

	/** the skin for the horizontal slider*/
	private static Skin skinHorizSlider;
	/** the skin for the vertical slider*/
	private static Skin skinVertSlider;
	
	private Skin skinSlider;
	private SkinSimpleButtonIndexModel skinIndexModel=new SkinSimpleButtonIndexModel();

	protected boolean isRollover = false, wasRollover = false;
	protected boolean isDragging = false;

	protected TrackListener trackListener;

	protected TrackListener createTrackListener(JSlider slider) {
		return new MyTrackListener();
	}

	protected Dimension getThumbSize() {
		Dimension size = getSkinThumb().getSize(); 
		return size;
	}
	
	public void paintThumb(Graphics g) {
		Rectangle knobBounds = thumbRect;
		
		int index=skinIndexModel.getIndexForState(slider.isEnabled(),isRollover,isDragging);
		getSkinThumb().drawCentered(g, index, knobBounds.x, knobBounds.y, knobBounds.width, knobBounds.height);

	}
	
	public static ComponentUI createUI(JComponent c) {
		return new XPSliderUI();
	}

	protected int getThumbOverhang() {
		if (slider.getOrientation() == JSlider.VERTICAL) {
			return (int) (getThumbSize().getWidth() - getTrackWidth()) / 2;
		} else {
			return (int) (getThumbSize().getHeight() - getTrackWidth()) / 2;
		}
	}

	/**
	 * This TrackListener extends the BasicSliderUI.TrackListener such that
	 * rollover and dragging state can be tracked.
	 */
	class MyTrackListener extends BasicSliderUI.TrackListener {
		public void mouseReleased(MouseEvent e) {
			super.mouseReleased(e);
			isDragging = false;
			slider.repaint();
		}

		public void mousePressed(MouseEvent e) {
			super.mousePressed(e);
			if (thumbRect.contains(e.getX(), e.getY())) {
				isDragging = true;
			}
			slider.repaint();
		}
		public void mouseEntered(MouseEvent e) {
			isRollover = false;
			wasRollover = false;
			if (thumbRect.contains(e.getX(), e.getY())) {
				isRollover = true;
			}
		}
		public void mouseExited(MouseEvent e) {
			isRollover = false;
			if (isRollover != wasRollover) {
				slider.repaint();
				wasRollover = isRollover;
			}
		}
		public void mouseDragged(MouseEvent e) {
			if (thumbRect.contains(e.getX(), e.getY())) {
				isRollover = true;
			}
			super.mouseDragged(e);
		}
		public void mouseMoved(MouseEvent e) {
			if (thumbRect.contains(e.getX(), e.getY())) {
				isRollover = true;
				if (isRollover != wasRollover) {
					slider.repaint();
					wasRollover = isRollover;
				}
			} else {
				isRollover = false;
				if (isRollover != wasRollover) {
					slider.repaint();
					wasRollover = isRollover;
				}
			}
		}
	}

	public void paintTrack(Graphics g) {
		Color trackColor = Color.red; 

		boolean leftToRight = slider.getComponentOrientation().isLeftToRight();

		g.translate(trackRect.x, trackRect.y);

		int trackLeft = 0;
		int trackTop = 0;
		int trackRight = 0;
		int trackBottom = 0;

		// Draw the track
		if (slider.getOrientation() == JSlider.HORIZONTAL) {
			trackBottom = (trackRect.height - 1) - getThumbOverhang();
			trackTop = trackBottom - (getTrackWidth() - 1);
			trackRight = trackRect.width - 1;

			int h=(trackBottom-trackTop- getSkinHorizSlider().getVsize()) / 2;
			getSkinHorizSlider().draw(g,0,  trackLeft,trackTop+h,  trackRight-trackLeft,getSkinHorizSlider().getVsize());

		} else {
			if (leftToRight) {
				trackLeft = (trackRect.width - getThumbOverhang()) - getTrackWidth();
				trackRight = (trackRect.width - getThumbOverhang()) - 1;
			} else {
				trackLeft = getThumbOverhang();
				trackRight = getThumbOverhang() + getTrackWidth() - 1;
			}
			trackBottom = trackRect.height - 1;

			int w=(trackRight-trackLeft- getSkinVertSlider().getHsize()) / 2;
			getSkinVertSlider().draw(g, 0,  trackLeft+w,trackTop,  getSkinVertSlider().getHsize(),trackBottom-trackTop);
		}

		g.translate(-trackRect.x, -trackRect.y);
	}
    protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
    	g.setColor(XPLookAndFeel.getDarkControl());
        g.drawLine( x, 0, x, tickBounds.height / 2 - 1 );
    }

    protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
    	g.setColor(XPLookAndFeel.getDarkControl());
        g.drawLine( x, 0, x, tickBounds.height - 2 );
    }

    protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
    	g.setColor(XPLookAndFeel.getDarkControl());
        g.drawLine( 0, y, tickBounds.width / 2 - 1, y );
    }

    protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
    	g.setColor(XPLookAndFeel.getDarkControl());
        g.drawLine( 0, y,  tickBounds.width - 2, y );
    }
	
	
	/**
	 * Returns the skinHorizSlider.
	 * @return SkinGenericButton
	 */
	public static Skin getSkinHorizSlider() {
		if (skinHorizSlider==null)
			skinHorizSlider= new Skin("XPSliderHorizBackground.res", 1,  4,0, 4,0);
		return skinHorizSlider;
	}

	/**
	 * Returns the skinThumbHoriz.
	 * @return SkinCenteredButton
	 */
	public static Skin getSkinThumbHoriz() {
		if (skinThumbHoriz==null)
			skinThumbHoriz= new Skin("XPSliderHoriz.res", 4, 0);
		return skinThumbHoriz;
	}

	/**
	 * Returns the skinThumbVert.
	 * @return SkinCenteredButton
	 */
	public static Skin getSkinThumbVert() {
		if (skinThumbVert==null)
			skinThumbVert= new Skin("XPSliderVert.res", 4, 0);
		return skinThumbVert;
	}

	/**
	 * Returns the skinVertSlider.
	 * @return SkinGenericButton
	 */
	public static Skin getSkinVertSlider() {
		if (skinVertSlider==null)
			skinVertSlider= new Skin("XPSliderVertBackground.res",1,  0,4, 0,4);		// 0,2, 0,2
		return skinVertSlider;
	}
	
	
	
	

	/**
	 * Returns the skinSlider.
	 * @return Skin
	 */
	public Skin getSkinThumb() {
		if (skinSlider==null)
			skinSlider=(slider.getOrientation() == JSlider.HORIZONTAL) ? getSkinThumbHoriz() : getSkinThumbVert();
		return skinSlider;
	}

}

⌨️ 快捷键说明

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