我正在使用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...
}
提前致谢!
答案 0 :(得分:3)
您需要一个自定义ProgressBarUI
,可能来自BasicProgressBarUI
插图here。您可以使用现有的paintDeterminate()
实施作为指南。 LinearGradientPaint
BasicSliderUI
应用于ProgressIcon
{/ 3}}。
或者,请考虑{{1}}显示here。