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);
}
}

这是效果图,是不是好看很多?大家也可以试着自己美化一下哦!!!


原创粉丝点击