Swing JProgressbar im Windows Look & Feel Farbanpassung

Angry Onion

Mitglied
Hallo,

ich habe in einem JFrame 6 JProgressBars und möchte gerne, dass sie, je nach Fortschritt, verschiedene Farben haben. Das heißt, bei 0% rot, bei 50% gelb und bei 100% grün.

Einen schönen Farbverlauf habe ich bereits hinbekommen und wenn ich das Standard L&F von Java benutze funktioniert es auch.

Gibt es eine Möglichkeit, die JProgressBars auch im Windows L&F irgendwie individuell anzupassen, am besten abhängig von ihrem Wert?

UIManager.put("ProgressBar.background", Color.BLACK); //colour of the background
UIManager.put("ProgressBar.foreground", Color.RED); //colour of progress bar
UIManager.put("ProgressBar.selectionBackground",Color.YELLOW); //colour of percentage counter on black background
UIManager.put("ProgressBar.selectionForeground",Color.BLUE); //colour of precentage counter on red background

Habe jetzt schon mehrere Sachen gelesen, wie man generell die Farbe ändern kann mit UIManager. Doch nichtmal das hat funktioniert.

Dankeschön im Vorraus,

Yannic
 

Tobse

Top Contributor
Ich denke nicht, dass das geht. Nach meiner Auffassung werden - wenn du das LAF über UIManager.getSystemLookAndFeelClassName() setzt - die Komponenten vom OS gemalt (sprich der selbe Code der auch die anderen Komponenten der Windows-Oberfläche rendert). Den wirst du so einfach nicht beeinfluss können, vllt hilft dir ein JNI-Trick.
 

Lodoss

Aktives Mitglied
da würden mir spontan folgende ansätze einfallen:

1) [Unschön] der thread der deine aktion durchführt steuert die farbe gleich mit... finde ich nicht ganz so elegant, da damit die steuerlogic für die farbe nicht so recht da sitzt, wo sie hingehört

Java:
package customProgressBar;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JProgressBar;

public class ProgressBarDemo extends JFrame
{
	JProgressBar pBar = null;
	
	Thread progresser = new Thread(new Runnable()
	{
		@Override
		public void run()
		{
			while (!Thread.currentThread().isInterrupted())
			{
				int newVal = 0;
				
				if (pBar.getValue() != 100)
				{
					newVal = pBar.getValue()+1;
					
					if (newVal <30)
					{
						pBar.setForeground(Color.red);
					}
					else if (newVal < 60)
					{
						pBar.setForeground(Color.yellow);
					}
					else
					{
						pBar.setForeground(Color.green);
					}
				}
				pBar.setValue(newVal);
				try
				{
					Thread.sleep(200);
				}
				catch (InterruptedException e){}
			}
		}
	});
	
	public ProgressBarDemo()
	{
		this.addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
				progresser.interrupt();
			}
		});
		
		this.setSize(200,100);
		pBar = new JProgressBar();
		pBar.setValue(0);
		pBar.setBackground(Color.black);
		this.setLayout(new FlowLayout());
		this.add(pBar);
		this.setVisible(true);
		
		progresser.start();
	}
	
	public static void main(String[] args)
	{
		new ProgressBarDemo();
	}
}

2) [Hüpbscher] du kannst von JProgressbar erben und die hintergrundfarbe anpassen wenn ein neuer wert gesetzt wird

Java:
package customProgressBar;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JProgressBar;

public class ProgressBarDemo extends JFrame
{
	CustomProgressBar pBar = null;
	
	Thread progresser = new Thread(new Runnable()
	{
		@Override
		public void run()
		{
			while (!Thread.currentThread().isInterrupted())
			{
				int newVal = 0;
				
				if (pBar.getValue() != 100)
				{
					newVal = pBar.getValue()+1;
				}
				pBar.setValue(newVal);
				try
				{
					Thread.sleep(200);
				}
				catch (InterruptedException e){}
			}
		}
	});
	
	public ProgressBarDemo()
	{
		this.addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
				progresser.interrupt();
			}
		});
		
		this.setSize(200,100);
		pBar = new CustomProgressBar();
		pBar.setValue(0);
		pBar.setBackground(Color.black);
		this.setLayout(new FlowLayout());
		this.add(pBar);
		this.setVisible(true);
		
		progresser.start();
	}
	
	public static void main(String[] args)
	{
		new ProgressBarDemo();
	}
}

Java:
package customProgressBar;

import java.awt.Color;

import javax.swing.JProgressBar;

public class CustomProgressBar extends JProgressBar
{
	@Override
	public void setValue(int n)
	{
		super.setValue(n);
		if (n <30)
		{
			this.setForeground(Color.red);
		}
		else if (n < 60)
		{
			this.setForeground(Color.yellow);
		}
		else
		{
			this.setForeground(Color.green);
		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A JProgressBar: Farbe im Windows Look&Feel ändern. AWT, Swing, JavaFX & SWT 1
J Rekursive Methode JProgressBar AWT, Swing, JavaFX & SWT 4
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
G JProgressBar: Verständnis Problem AWT, Swing, JavaFX & SWT 3
S Swing JProgressBar läuft nicht mit AWT, Swing, JavaFX & SWT 12
T Swing JProgressBar mit String unschön AWT, Swing, JavaFX & SWT 5
H jprogressbar während datenabfrage anzeigen AWT, Swing, JavaFX & SWT 5
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
E Swing JProgressBar updaten AWT, Swing, JavaFX & SWT 3
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
V Swing JProgressBar aktualisieren AWT, Swing, JavaFX & SWT 14
M JProgressBar updatet nicht AWT, Swing, JavaFX & SWT 4
T Swing JProgressBar Indeterminate bleibt stehen bei neuem Fenster AWT, Swing, JavaFX & SWT 6
A JProgressBar updaten abhängig vom Output eines externen Skripts AWT, Swing, JavaFX & SWT 2
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
J JProgressBar Indeterminate AWT, Swing, JavaFX & SWT 17
J JProgressBar Farbverlauf AWT, Swing, JavaFX & SWT 2
O Probleme mit JProgressBar bei der Statusanzeige AWT, Swing, JavaFX & SWT 5
S jProgressbar von einem Download AWT, Swing, JavaFX & SWT 6
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
S Swing StatusLeiste mit JProgressBar AWT, Swing, JavaFX & SWT 4
S JProgressBar in Abhängigkeit eines FileInputStreams AWT, Swing, JavaFX & SWT 2
S (Applets) JProgressBar wird erst am Ende angezeigt AWT, Swing, JavaFX & SWT 13
S Problem mit JProgressBar AWT, Swing, JavaFX & SWT 3
E Swing DB Zugriff mit JProgressBar?! AWT, Swing, JavaFX & SWT 8
C Swing JProgressBar Aktualisiert sich nicht. AWT, Swing, JavaFX & SWT 9
M JProgressBar Look and Feel AWT, Swing, JavaFX & SWT 5
C JProgressBar und JLabel AWT, Swing, JavaFX & SWT 5
K JProgressBar transparent AWT, Swing, JavaFX & SWT 10
M JProgressBar AWT, Swing, JavaFX & SWT 2
K JProgressBar für Serialisierung AWT, Swing, JavaFX & SWT 6
multiholle [JProgressBar] Raster deaktivieren AWT, Swing, JavaFX & SWT 14
M JProgressBar übereinander legen? AWT, Swing, JavaFX & SWT 3
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
G JProgressBar actionPerformedMethode und SwingUI thread AWT, Swing, JavaFX & SWT 36
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Repaint bei JProgressBar AWT, Swing, JavaFX & SWT 3
A Richtiger Umgang mit jProgressBar AWT, Swing, JavaFX & SWT 2
H JProgressBar in TableColumn von JTable setzen/abfragen AWT, Swing, JavaFX & SWT 5
B JProgressBar: wie muss ich das lösen? AWT, Swing, JavaFX & SWT 4
R JProgressBar-Verhalten AWT, Swing, JavaFX & SWT 5
G JProgressbar AWT, Swing, JavaFX & SWT 8
C JProgressBar und ihre Tücken AWT, Swing, JavaFX & SWT 8
G JProgressBar in JTable AWT, Swing, JavaFX & SWT 6
G Probleme mit JProgressbar auf JPanel in JFrame AWT, Swing, JavaFX & SWT 6
F JProgressBar und NullPointerException AWT, Swing, JavaFX & SWT 4
T JProgressBar und CMP Bean AWT, Swing, JavaFX & SWT 2
J JProgressBar flackert AWT, Swing, JavaFX & SWT 14
S JProgressBar zu JOptionPane hinzufügen. AWT, Swing, JavaFX & SWT 8
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
L JProgressbar möglichst genau AWT, Swing, JavaFX & SWT 3
G JProgressBar + Thread + Client AWT, Swing, JavaFX & SWT 10
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G JProgressBar AWT, Swing, JavaFX & SWT 8
L JProgressBar wird nicht mehr aktualisiert AWT, Swing, JavaFX & SWT 2
U JProgressBar in umgekehrter Richtung AWT, Swing, JavaFX & SWT 2
S JProgressBar einbinden AWT, Swing, JavaFX & SWT 5
H JProgressBar AWT, Swing, JavaFX & SWT 6
T JProgressBar und JPG AWT, Swing, JavaFX & SWT 2
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
T Swing DPI-Skalierung und Java 2D unter Java 11 (und Windows 10) AWT, Swing, JavaFX & SWT 2
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
Avarion Swing JFrame unter Windows 10 kleiner ?! AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
S Swing Automatisch 2px Rahmen in Windows 8 AWT, Swing, JavaFX & SWT 0
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
morphesus AWT Windows 7 Aero Look AWT, Swing, JavaFX & SWT 2
H Fenstergröße bei Mac und Windows gleich einstellen? AWT, Swing, JavaFX & SWT 3
R Problem mit TrayIcon unter Windows/Linux AWT, Swing, JavaFX & SWT 7
B Windows Look and Feel AWT, Swing, JavaFX & SWT 2
S Swing TrayIcon bei Systemdienst (Windows, Systemuser) AWT, Swing, JavaFX & SWT 7
N Swing JTree TreePath zu Windows Pfad? AWT, Swing, JavaFX & SWT 2
S GUI aussehen unter Windows und Linux (und Mac) AWT, Swing, JavaFX & SWT 13
N Swing von Windows zu Ubuntu AWT, Swing, JavaFX & SWT 3
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
A Swing Probleme unter Windows 7 AWT, Swing, JavaFX & SWT 5
Dragonfire Swing UTF-8 BOB Probleme mit Windows Look and Feel AWT, Swing, JavaFX & SWT 4
J Applet Linux(-(k)ubuntu-)-Firefox-Java-Plugin - Fensterschließprobleme die bei Windows so nicht auftreten AWT, Swing, JavaFX & SWT 4
F AWT MouseMotionListener e.getButton() ist immer 0 unter Linux und Windows AWT, Swing, JavaFX & SWT 6
E Implementierung des Windows Rechners? AWT, Swing, JavaFX & SWT 7
O AWT Shaped, Translucent Windows AWT, Swing, JavaFX & SWT 14
LittleJavaCup Suchmaschine programmieren (wie bei Windows) AWT, Swing, JavaFX & SWT 2
W TrayIcon in Windows 7 unscharf AWT, Swing, JavaFX & SWT 8
R Windows-Dateien auf GUI ziehen AWT, Swing, JavaFX & SWT 3
G Quaqua unter Windows AWT, Swing, JavaFX & SWT 15
S LookAndFeel Look and Feel mit Windows funktioniert nicht AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen


Oben