这很容易,除了颜色变化。该部分需要对图形进行手工编码。我没有运行这段代码,但它应该非常接近它的工作方式:
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);
}
}
这可能缺少一些细节,例如重置剪辑区域等。我没有运行它,但如果调整正确,它应该会产生几乎相同的结果。文本被绘制了两次(第二次剪切)以复制颜色变化的效果。