如何使用渐变制作进度条

时间:2014-02-24 20:16:53

标签: java swing jprogressbar tablecellrenderer

我正在使用swing并希望通过添加与应用主题相匹配的软渐变来使我的JProgress栏看起来更具吸引力。

我的进度条位于我工作的JTable单元格中但是我当前的示例使用渐变而不是JProgress条本身来绘制单元格。我希望细胞是纯白色的,但进度条是浅灰色的 - >因为它变得更加完整而变成深灰色。

如果其他东西可以解决问题,请打开以不使用JProgress栏。 (也许只使用细胞渲染器?)

我的细胞渲染器

class JPBRenderer extends JProgressBar implements TableCellRenderer {

Batch batch;

public JPBRenderer() {
    super();
    setStringPainted(true);
    setBorderPainted(false);
    setOpaque(false); //EDIT 1
    setForeground(UIConfig.backgroundColor);
}

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {
    batch = ((BatchTableModel)table.getModel()).getBatchForRow(row);
    setMinimum(0);
    setMaximum(batch.getQuantityToProduce());
    setValue(batch.getQuantityCompleted());
    setString(GeneralUtils.formatNumber((batch.getQuantityCompleted()/batch.getQuantityToProduce())*100, 1) + " %");
    return this;
}

@Override
protected void paintComponent(Graphics g) {

    Color color2 = UIConfig.backgroundColor;
    Color color1 = UIConfig.backgroundColor.brighter().brighter();
    double value = 1;
    if(batch != null){
        value = batch.getQuantityCompleted()/batch.getQuantityToProduce();
    }
    int w = getWidth();
    int h = getHeight();
    Graphics2D g2d = (Graphics2D) g;

    GradientPaint gp = new GradientPaint(0, 0, color1, w, 0, color2);

    g2d.setPaint(gp);
    g2d.fillRect(0, 0, w, h);

    super.paintComponent(g);
}
}

我的批次类包含...

public class Batch {
    private Integer id;
    private BigDecimal length;
    private int quantityToProduce;
    private int quantityCompleted;

    //Constructors and getters...
}

提前致谢!

1 个答案:

答案 0 :(得分:3)

您需要一个自定义ProgressBarUI,可能来自BasicProgressBarUI插图here。您可以使用现有的paintDeterminate()实施作为指南。 LinearGradientPaint BasicSliderUI应用于ProgressIcon {/ 3}}。

或者,请考虑{{1}}显示here