📄 xpsliderui.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 + -