Это довольно легко, за исключением смены цвета.Эта часть требует ручного кодирования графики.Я не запускал этот код, но он должен быть довольно близок к тому, как это должно работать:
class ProgressSlider extends Component {
protected Dimension calcPreferredSize() {
return new Dimension(convert(getDisplayWidth(), 6));
}
public void paint(Graphics g) {
g.setColor(0xffffff);
g.fillRect(getX(), getY(), getWidth(), getHeight());
g.setColor(0);
Font f = getStyle().getFont();
g.drawString(progressPercetage, convert(4) + getX(), getY() + f.getHeight() / 2 + getHeight() - 2);
g.drawString(progressText, convert(10) + getX(), getY() + f.getHeight() / 2 + getHeight() - 2);
g.setColor(RED);
g.fillRect(getX(), getY(), getWidth() / 100 * progressPercentage, getHeight());
g.setColor(0xcccccc);
g.drawRect(getX(), getY(), getWidth() - 1, getHeight() - 1);
g.clipRect(getX(), getY(), getWidth() / 100 * progressPercentage, getHeight());
g.setColor(0xffffff);
g.drawString(progressPercetage, convert(4) + getX(), getY() + f.getHeight() / 2 + getHeight() - 2);
g.drawString(progressText, convert(10) + getX(), getY() + f.getHeight() / 2 + getHeight() - 2);
}
}
В нем могут отсутствовать некоторые детали, такие как сброс области отсечения и т. Д. Я не запускал его, но этодолжно привести к значительному результату при правильной настройке.Текст рисуется дважды (второй раз с обрезкой), чтобы воспроизвести эффект изменения цвета.