# JProgressBar Farbverlauf



## Java4Life (22. Jun 2011)

Hi,

ich wollte mal fragen,ob schon jemand seine ProgressBar ein bisschen aufgemotzt hat. Würde bei meiner gerne Farbverläufe einbauen...Leider weiß ich nicht so richtig,wo ich anfangen soll...
Ich habe folgende Klasse:


```
class ProgressRenderer extends JProgressBar implements TableCellRenderer {
       int zahl = 0;

	// Constructor for ProgressRenderer.
	public ProgressRenderer(int min, int max) {
		super(min, max);
	}

	/*
	 * Returns this JProgressBar as the renderer for the given table cell.
	 */
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {

		zahl = (int) ((Float) value).floatValue();
		
		for (int i = 255; i > 0; i--) {
			setForeground(new Color(255, i, i)); 
			setValue(zahl);
		}
		return this;
	}
}
```

Die ProgressBar ist Teil der JTable und ich hätte gerne, dass sie zum Beispiel von Weiß nach Rot verläuft (also der Status gesetzt wird)...
Ansonsten funktioniert schon alles, allerdings sieht das ein bisschen bescheiden aus,wenn man
das so setzt:

if (zahl > 50 && zahl < 85) { setForeground(Color.YELLOW);}

Bin für jeden Tipp dankbar!!! :toll:


----------



## eRaaaa (22. Jun 2011)

Hm wie genau stellst du dir denn den Farbverlauf vor? 
So etwas wie:

```
public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
//progressbar
		final JProgressBar bar = new JProgressBar(){
			@Override
			protected void paintComponent(Graphics g) {
				Graphics2D g2 = (Graphics2D) g;
			    GradientPaint redtowhite = new GradientPaint(0, 0, Color.WHITE, getWidth(), getHeight(), Color.RED); //besser ausserhalb der paintCompionent einmalig erstellen
			    g2.setPaint(redtowhite);
			    g2.fill(new Rectangle(getWidth()*getValue()/100, getHeight()));
			}
		};
//
		panel.add(bar);
		frame.add(panel);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
//demozwecks
		final Timer t = new Timer(1000, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				bar.setValue(bar.getValue()+10);
				if(bar.getValue()>=100){
					//stoppe timer
				}
			}
		});
		t.setInitialDelay(0);
		t.start();
	}
```

???:L


----------



## Java4Life (23. Jun 2011)

Danke! Sieht auf jeden Fall interessant aus. Denke ich kann das gebrauchen!

PS: Vielen Dank,hat wirklich geholfen und sieht (ohne anmaßend zu klingen) fantastisch aus!!! Wenn ich könnte, würde ich 10x auf Danke klicken ^^


----------

