Расширяя очень полезный ответ TrashGod, я добавил несколько строк кода, чтобы панель была заполнена до точки, в которой вы ее переместили. Остальная часть бара будет пустой:
Код для этого:
@Override
public void paintTrack(Graphics g) {
// ... TrashGod's code ...
// calculate how much of the progress bar to fill
double percentage = (double)slider.getValue()/(double)slider.getMaximum();
// fill the progress bar with a rectange of that size, (with curved corners of 4px diameter)
g2d.fillRoundRect(t.x, t.y, (int)(t.width*percentage), t.height, 4, 4);
// ...
}
И если вам также нужен цвет фона, нарисуйте второй прямоугольник перед тем, как нарисовать первый:
// ... TrashGod's code ...
// calculate how much of the progress bar to fill
double percentage = (double)slider.getValue()/(double)slider.getMaximum();
// PAINT THE BACKGROUND
// create a gradient paint for the background
p = new LinearGradientPaint(start, end, new float[] {0.4f,0.8f}, new Color[] {Color.gray.brighter(), Color.gray.brighter().brighter()});
g2d.setPaint(p);
g2d.fillRoundRect((int)(t.width*percentage), t.y, t.width - (int)(t.width*percentage), t.height, 4, 4);
// PAINT THE FOREGROUND
// create the gradient paint
p = new LinearGradientPaint(start, end, fracs, colors);
g2d.setPaint(p);
// fill the progress bar with a rectange of that size, (with curved corners of 4px diameter)
g2d.fillRoundRect(t.x, t.y, (int)(t.width*percentage), t.height, 4, 4);