Пользовательская ширина JSlider BasicSliderUI: такая же, как у foobar2000

Я пытаюсь улучшить свои навыки в Java (качели)! Я хочу иметь собственный JSlider. Я хочу иметь такой же внешний вид, как на этом снимке экрана (внизу):

игрок foobar2000

Пока мне только удается создать круговую дорожку и заполнить ее. Что касается части трека, я не знаю, как нарисовать продвижение ползунка. Это моя проблема. У меня получается серая дорожка, но как покрасить продвижение? Вот мой код:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;

import javax.swing.JComponent;
import javax.swing.JSlider;
import javax.swing.plaf.basic.BasicSliderUI;


public class CustomJSlider extends BasicSliderUI {

    public CustomJSlider(JSlider b) {
        super(b);
    }

    public void paintTicks(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        Rectangle t = trackRect;

        g2d.setPaint(new Color(0,91,91));
        g2d.fillRoundRect(t.x, t.y, t.width, t.height, 5, 5);

    }

    @Override
    public void paint(Graphics g, JComponent c) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        super.paint(g, c);
    }

    @Override
    protected Dimension getThumbSize() {
        return new Dimension(15, 15);
    }


    @Override
    public void paintTrack(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        Rectangle t = trackRect;

        g2d.setPaint(new Color(91,91,91));
        g2d.fillRoundRect(t.x, t.y+3, t.width, t.height-5, 5, 5);
    }


    @Override
    public void paintThumb(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

        Rectangle t = thumbRect;
        Shape circle = new Ellipse2D.Double(t.x, t.y, t.width, t.height);

//        GradientPaint blue = new GradientPaint(25, 25, new Color(86,85,30), 15, 25, Color.black, true);
        g2d.setPaint(new Color(30,173,216));

        g2d.fill(circle);
        g2d.draw(circle);
    }

}

Итак, как нарисовать дорожку advanced? Это лучший способ сделать?


person zed13    schedule 06.12.2014    source источник
comment
Я думаю, что JSlider внизу является частью музыкального проигрывателя.   -  person Gilbert Le Blanc    schedule 06.12.2014
comment
Да, конечно, но я хочу создать такой же слайдер с java JSlider, и мне это не удается.   -  person zed13    schedule 06.12.2014