forked from yinchuandong/JavaVerify
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSliderUi.java
More file actions
144 lines (119 loc) · 4.45 KB
/
SliderUi.java
File metadata and controls
144 lines (119 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package Widget;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import javax.swing.JSlider;
public class SliderUi extends javax.swing.plaf.metal.MetalSliderUI {
private String ballColor;
private String fillColor;
private String unFillColor;
public SliderUi(){
this("#75A101", "#75A101", "#737373");
}
/**
* 带颜色的填充
* @param ballColor 如:#282828
* @param fillColor 如:#75A101
* @param unFillColor 如:#737373
*/
public SliderUi(String ballColor, String fillColor, String unFillColor){
this.ballColor = ballColor;
this.fillColor = fillColor;
this.unFillColor = unFillColor;
}
/**
* 绘制指示物
*/
public void paintThumb(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//填充椭圆框为当前thumb位置
g2d.fillOval(thumbRect.x, thumbRect.y, thumbRect.width/2, thumbRect.height/2);
//也可以帖图(利用鼠标事件转换image即可体现不同状态)
//g2d.drawImage(image, thumbRect.x, thumbRect.y, thumbRect.width,thumbRect.height,null);
}
/**
* 绘制刻度轨迹
*/
public void paintTrack(Graphics g) {
if (slider.getOrientation() == JSlider.HORIZONTAL) {
drawHorizontal(g);
} else {
drawVertical(g);
}
}
private void drawHorizontal(Graphics g){
int ch, cw;
Rectangle trackBounds = trackRect;
Graphics2D g2 = (Graphics2D) g;
ch = 3;
cw = trackBounds.width;
//内部整个view的偏移
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.translate(trackBounds.x, trackBounds.y + ch + 3);
// 背景设为灰色
g2.setPaint(Color.decode(unFillColor));
g2.fillRect(0, -ch + 1 , cw + thumbRect.width/2, ch );
int trackLeft = 0;
int trackRight = 0;
trackRight = trackRect.width;
int middleOfThumb = 0;
int fillLeft = 0;
int fillRight = 0;
//坐标换算
middleOfThumb = thumbRect.x + (thumbRect.width / 2);
middleOfThumb -= trackRect.x;
if (!drawInverted()) {
fillLeft = !slider.isEnabled() ? trackLeft : trackLeft + 1;
fillRight = middleOfThumb;
} else {
fillLeft = middleOfThumb;
fillRight = !slider.isEnabled() ? trackRight - 1 : trackRight - 2;
}
// 设定左边背景
g2.setPaint(Color.decode(fillColor));
g2.fillRect(0, -ch + 1, fillRight - fillLeft + thumbRect.width/2, ch );
//圆点的背景
g2.setPaint(Color.decode(ballColor));
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
g2.translate(-trackBounds.x + thumbRect.width/2, -(trackBounds.y + ch + 1));
}
private void drawVertical(Graphics g){
int ch, cw;
Rectangle trackBounds = trackRect;
Graphics2D g2 = (Graphics2D) g;
ch = trackBounds.height;
cw = 3;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.translate(trackBounds.x, trackBounds.y + ch);
// 背景设为灰色
g2.setPaint(Color.decode(fillColor));
g2.fillRect(cw, -ch , cw, ch);
int trackTop = 0;
int trackBottom = 0;
trackBottom = trackRect.height;
int middleOfThumb = 0;
int fillTop = 0;
int fillBottom = 0;
//坐标换算
middleOfThumb = thumbRect.y + (thumbRect.height / 2);
middleOfThumb -= trackRect.y;
if (!drawInverted()) {
fillTop = !slider.isEnabled() ? trackTop : trackTop + 1;
fillBottom = middleOfThumb;
} else {
fillTop = middleOfThumb;
fillBottom = !slider.isEnabled() ? trackBottom - 1 : trackBottom - 2;
}
// 设定上边背景
g2.setPaint(Color.decode(unFillColor));
g2.fillRect(cw, -ch, cw ,fillBottom - fillTop);
//圆点的背景
g2.setPaint(Color.decode(ballColor));
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
g2.translate(-trackBounds.x + 1, -(trackBounds.y + ch));
}
}