Swing——JSlider美化
来源:互联网 发布:淘宝上苹果官方旗舰店 编辑:程序博客网 时间:2024/06/06 04:14
对于大部分人来说,Java默认的slider实在是不忍心用,因为太难看了。虽然说它难看,但是他确实最基本的,最基础的,Java中,所有美化后的JSlider都是通过更改这个最基本的UI之后得来的。所以,从某一方面讲,他却又是最重要的。
美化JSlider,主要通过 public void paintThumb() 以及public void paintTrack(),这里为什么不用paint()方法呢?答案很简单,因为paint()方法通过间接调用这两个方法而进行绘制,也就是说,paint()方法里面包含这两个方法。所以直接重写这两个方法就OK啦!
public void paint( Graphics g, JComponent c ) {recalculateIfInsetsChanged();
recalculateIfOrientationChanged();
Rectangle clip = g.getClipBounds();
if ( !clip.intersects(trackRect) && slider.getPaintTrack())
calculateGeometry();
if ( slider.getPaintTrack() && clip.intersects( trackRect ) ) {
paintTrack( g );
}
if ( slider.getPaintTicks() && clip.intersects( tickRect ) ) {
paintTicks( g );
}
if ( slider.getPaintLabels() && clip.intersects( labelRect ) ) {
paintLabels( g );
}
if ( slider.hasFocus() && clip.intersects( focusRect ) ) {
paintFocus( g );
}
if ( clip.intersects( thumbRect ) ) {
paintThumb( g );
}
}
上面为BasicSliderUI中的一部分,是不是可以看出paint()调用了paintThumb()以及piantTrack()?下面我们来绘制一个好看的Slider!
代码如下:
public class MySliderUI extends BasicSliderUI{
private static final Color BACKGROUND01=new Color(0,30,255);
private static final Color BACKGROUND02=new Color(234,236,246);
public MusicSliderUI01(JSlider arg0) {
super(arg0);
}
@Override
public void paintThumb(Graphics g){
Graphics2D g2d=(Graphics2D) g;
BasicStroke stroke=new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
g2d.setStroke(stroke);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
GradientPaint gp=new GradientPaint(0,0,BACKGROUND02,0,thumbRect.height,BACKGROUND01);
g2d.setPaint(gp);
g2d.fillRoundRect(thumbRect.x, thumbRect.y, thumbRect.width, thumbRect.height, 10, 10);
BasicStroke stroke1=new BasicStroke(3,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
g2d.setStroke(stroke1);
g2d.drawLine(8, thumbRect.height/2,thumbRect.x+8 , thumbRect.height/2);
}
@Override
public void paintTrack(Graphics g){
Graphics2D g2d=(Graphics2D) g;
// 设定渐变
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.3f));
g2d.setPaint(new GradientPaint(0, 0,BACKGROUND02 , 0,trackRect.height, BACKGROUND01, true));
g2d.setStroke(new BasicStroke(4,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
g2d.drawLine(8, trackRect.height/2+1, trackRect.width+8, trackRect.height/2+1);
}
}
这是效果图,是不是好看很多?大家也可以试着自己美化一下哦!!!
- Swing——JSlider美化
- Swing JSlider 美化
- Swing——JLabel美化
- Swing——JButton美化
- Swing——JTextField美化
- 博为峰Java技术文章 ——JavaSE Swing 滑动组件JSliderⅡ
- 博为峰Java技术文章 ——JavaSE Swing 滑动组件JSliderⅢ
- 原创RGB调节器——JSlider Exercise
- JSlider
- JSlider
- JSlider
- Swing 美化包-JTattoo
- Swing界面美化
- Swing 美化工具包
- swing界面美化
- 美化SWing界面
- swing美化效果
- swing美化包的应用
- Linux脚本的执行方式解析
- 数组与集合的应用之数组排序与查询(使用直接插入法)
- 数组与集合的应用之数组排序与查询(使用Sort方法对数组进行排序)
- 欢迎使用CSDN-markdown编辑器
- 使用oschina的git服务器图文流程
- Swing——JSlider美化
- 数组与集合的应用之数组排序与查询(反转数组中元素的顺序)
- Codeforces Round #418 (Div. 2)-C(尺取法)
- Avisynth基础(一)
- 数组与集合的应用之常用集合的使用(用动态数组保存学生姓名)
- 最短路经典例题-紫书11-4 Calling Circles(Floyd传递闭包+map+DFS)
- HDFS 原理、架构与特性
- 数组与集合的应用之常用集合的使用(用List集合传递学生信息)
- 数组与集合的应用之常用集合的使用(用TreeSet生成不重复自动排序随机数组)