Swing——JSlider美化

xiaoxiao2021-02-28  117

        对于大部分人来说,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); } }

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

转载请注明原文地址: https://www.6miu.com/read-67397.html

最新回复(0)