JProgressBar上的自定义画家

我试图通过使用自定义Painter对象来改变当前Swing L&F(我现在使用的是Nimbus)中进度条的颜色,但是在创建时这些进度条有时会坚持使用它们的原始颜色(这个变化似乎是随机发生)。

我可能错过了一些简单的东西,但我很难过,Painter对象(以及它在下面的调用)……

import javax.swing.Painter; import java.awt.*; public class ProgressPainter implements Painter { private Color light, dark; private GradientPaint gradPaint; public ProgressPainter(Color light, Color dark) { this.light = light; this.dark = dark; } @Override public void paint(Graphics2D g, Object c, int w, int h) { g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); gradPaint = new GradientPaint((w / 2.0f), 0, light, (w / 2.0f), (h /2.0f), dark, true); g.setPaint(gradPaint); g.fillRect(2, 2, (w - 5), (h - 5)); Color outline = new Color(0, 85, 0); g.setColor(outline); g.drawRect(2, 2, (w - 5), (h - 5)); Color trans = new Color(outline.getRed(), outline.getGreen(), outline.getBlue(), 100); g.setColor(trans); g.drawRect(1, 1, (w - 3), (h - 3)); } } 

在应用程序启动时调用…

 UIManager.put("ProgressBar[Enabled].foregroundPainter", new ProgressPainter(new Color(125, 255, 125), new Color(25, 175, 25))); UIManager.put("ProgressBar[Enabled+Indeterminate].foregroundPainter", new ProgressPainter(new Color(125, 255, 125), new Color(25, 175, 25))); 

然后使用…创建一个简单的JProgressBar

  JProgressBar progBar = new JProgressBar(0, 100); progBar.setStringPainted(true); progBar.setBounds(20, 10, 260, 30); frame.add(progBar); frame.setVisible(true); 

我自己有一个类似的程序。

虽然不记得实际的代码。

但我必须得到UI属性,覆盖颜色并重新应用它们。

我当时正在使用netbeans,自从设置了Nimbus UI以来,从属性中更改颜色字段并没有影响它。

尝试将ui更改为其他ui,并查看是否允许更改颜色。 我将在同一时间搜索我当时使用的代码。

找到了

 UIDefaults defaults = UIManager.getLookAndFeelDefaults(); defaults.put("nimbusOrange", new Color(0, 0, 255)); progressBar.putClientProperty("Nimbus.Overrides.InheritDefaults", Boolean.TRUE); progressBar.putClientProperty("Nimbus.Overrides", defaults); 

其中progressBar是JProgressBar