LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern?

RFJ

Neues Mitglied
Beim Windows look&feel ändert sich die Textfarbe von "selectionForeground" zu "selectionBackground", wenn die Fortschrittsanzeige am Text ankommt. Bei Nimbus scheint das nicht zu passieren. Kann man das bei Nimbus irgendwie einstellen, bzw. kriegt man das irgendwie manuell hin?
Genaugenommen verwende ich das Windows look&feel und kopier da die Daten der Nimbus ProgressBar rein.
zZ wird der Text der ProgressBar halt unleserlich weil der Text dunkel ist und die Fortschrittsanzeige auch.
 

X5-599

Top Contributor
Ich wusste doch, dass mir das bekannt vorkam. Man, ist auch schon wieder fast zwei Jahre her... Hier nochmal die Klasse und auch ein kleines Beispiel. Damals hab ich wohl keins gepostet? Egal, so könnte man es machen:
Code:
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;

import javax.swing.BoundedRangeModel;
import javax.swing.JProgressBar;


public class MyJProgressBar2 extends JProgressBar
{
    private static final long serialVersionUID = 7011699579650095776L;
    private boolean stringPaintedOverride = false;
    private Color textColorOutsidePaint = Color.BLACK;
    private Color textColorInsidePaint = Color.WHITE;
   
    public MyJProgressBar2()
    {
        setStringPainted(false);
    }
   
    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
       
        if(stringPaintedOverride)
        {
            drawString(g);
        }
    }
   
    @Override
    public void setStringPainted(boolean painted)
    {
        super.setStringPainted(false);
        setStringPaintedOverride(painted);
    }
   
    private void setStringPaintedOverride(boolean stringPaintedOverride)
    {
        this.stringPaintedOverride = stringPaintedOverride;
    }
   
    public void setTextColorOutsidePaint(Color textColorOutsidePaint)
    {
        this.textColorOutsidePaint = textColorOutsidePaint;
    }
   
    public void setTextColorInsidePaint(Color textColorInsidePaint)
    {
        this.textColorInsidePaint = textColorInsidePaint;
    }
   
    private void drawString(Graphics g)
    {
        g.setFont(getFont());
        Rectangle oldClip = g.getClipBounds();
       
        Insets b = getInsets(); // area for border
        int barRectWidth = getWidth() - (b.right + b.left);
        int barRectHeight = getHeight() - (b.top + b.bottom);
       
        int amountFull = 0;
        BoundedRangeModel model = getModel();
       
        if ( (model.getMaximum() - model.getMinimum()) != 0) {
            if (getOrientation() == JProgressBar.HORIZONTAL) {
                amountFull = (int)Math.round(barRectWidth *
                             getPercentComplete());
            } else {
                amountFull = (int)Math.round(barRectHeight *
                             getPercentComplete());
            }
        }
       
        int fillStart;
        Point renderLocation = getStringPlacement(g);
       
        if (getOrientation() == JProgressBar.HORIZONTAL)
        {
            if(getComponentOrientation().isLeftToRight())
                fillStart = b.left;
            else
                fillStart = b.left + barRectWidth - amountFull;
           
            g.setColor(textColorOutsidePaint);
            drawString(g, renderLocation.x, renderLocation.y);
           
            g.setColor(textColorInsidePaint);
            g.clipRect(fillStart, b.top, amountFull, barRectHeight);
            drawString(g, renderLocation.x, renderLocation.y);
        }
        else
        {
            // VERTICAL
            fillStart = b.top + barRectHeight - amountFull;
           
            AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2);
            g.setFont(getFont().deriveFont(rotate));
            g.setColor(textColorOutsidePaint);
            drawString(g, renderLocation.x, renderLocation.y);
           
            g.setColor(textColorInsidePaint);
            g.clipRect(b.left, fillStart, barRectWidth, amountFull);
            drawString(g, renderLocation.x, renderLocation.y);
        }
       
        g.setClip(oldClip);
    }
   
    private Point getStringPlacement(Graphics g)
    {
        FontMetrics fontSizer = getFontMetrics(getFont());
        if (getOrientation() == JProgressBar.HORIZONTAL)
        {
            int x = (getWidth() / 2) - (int)Math.round(fontSizer.getStringBounds(progressString, g).getWidth() / 2);
            int y = (getHeight() - (int)Math.round((getHeight()-fontSizer.getStringBounds(progressString, g).getHeight()) / 2)) - 3;
            return new Point(x, y);
        }
        else
        {
            // VERTICAL
            int x = ((getWidth() / 2) - (int)Math.round(fontSizer.getStringBounds(progressString, g).getHeight() / 2)) + 4;
            int y = (int)Math.round((getHeight() - fontSizer.getStringBounds(progressString, g).getWidth()) / 2);
            return new Point(x, y);
        }
    }
   
    private void drawString(Graphics g, int x, int y)
    {
        if(g != null)
        {
            if(isIndeterminate())
                g.setColor(Color.BLACK);
           
            g.drawString(progressString, x, y);
        }
    }
}


Code:
SwingUtilities.invokeLater(new Runnable() {
	
	@Override
	public void run()
	{
		JFrame frame = new JFrame("Test Frame");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
		
		final JProgressBar bar = new MyJProgressBar2();
		bar.setMinimum(0);
		bar.setMaximum(100);
		bar.setStringPainted(true);
		bar.setString("0%");
		
		final Timer t = new Timer();
		t.schedule(new TimerTask() {
			
			private int currentValue = 0;
			
			@Override
			public void run()
			{
				if(currentValue <= 100)
				{
					bar.setString(String.format("%d%%", currentValue));
					bar.setValue(currentValue);
					bar.revalidate();
					bar.repaint();
					
					currentValue++;
				}
				else
				{
					t.cancel();
				}
			}
			
		}, 400, 100);
		
		
		frame.add(bar);
		frame.setSize(300, 70);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);				
	}
});

Hinweis: der Timer ist ein java.util.Timer.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
A Textfarbe im JTextfield AWT, Swing, JavaFX & SWT 3
A Problem mit JList! Textfarbe lässt sich nicht ändern! AWT, Swing, JavaFX & SWT 7
G Textfarbe bei JTextField ändern AWT, Swing, JavaFX & SWT 3
B JTable Textfarbe AWT, Swing, JavaFX & SWT 6
G Textfarbe in jLabel ändern,sobald neuer Text eingegeben wird AWT, Swing, JavaFX & SWT 3
B Jtable Textfarbe ändern AWT, Swing, JavaFX & SWT 2
D JTable - Textfarbe verändern AWT, Swing, JavaFX & SWT 3
Icewind ändern der Textfarbe in einer JTextArea AWT, Swing, JavaFX & SWT 2
G Textfarbe in JTextPane AWT, Swing, JavaFX & SWT 3
M JTabbedPane verändern mit Nimbus Look and Feel AWT, Swing, JavaFX & SWT 1
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
H Nimbus ProgressBar Colors AWT, Swing, JavaFX & SWT 9
H Nimbus L&F TitledBorder AWT, Swing, JavaFX & SWT 2
V Nimbus Look and Feel register Region problem AWT, Swing, JavaFX & SWT 5
V Nimbus Look And Feel Button textForeground AWT, Swing, JavaFX & SWT 8
M jTabbedPain und Nimbus AWT, Swing, JavaFX & SWT 4
T Nimbus JButton: Zeilenumbruch korrigieren? AWT, Swing, JavaFX & SWT 9
N Nimbus Look & Feel AWT, Swing, JavaFX & SWT 4
hdi LookAndFeel Nimbus BUG mit JTabbedPane?! AWT, Swing, JavaFX & SWT 5
Y LookAndFeel Nimbus einschalten geht nicht AWT, Swing, JavaFX & SWT 31
V Swing Nimbus Look And Feel verschiedene Buttons AWT, Swing, JavaFX & SWT 8
A LookAndFeel Rollover Effekt bei JTabbedPane deaktivieren (Nimbus) AWT, Swing, JavaFX & SWT 8
B LookAndFeel Cell Renderer für JTable bei Nimbus Look and Feel AWT, Swing, JavaFX & SWT 2
T Nimbus Überschrift AWT, Swing, JavaFX & SWT 10
P LookAndFeel nimbus JLabel undurchsichtig opaque funktioniert nicht AWT, Swing, JavaFX & SWT 4
R LookAndFeel Nimbus ändert Programmausführung AWT, Swing, JavaFX & SWT 8
Y LookAndFeel JTabbedPane: Tab-Farbe mit Nimbus setzen AWT, Swing, JavaFX & SWT 3
N Swing Nimbus arbeitet nicht korrekt korrekt bei setEnabled() für JMenuItem AWT, Swing, JavaFX & SWT 2
C LookAndFeel Nimbus TabbedPane Backgroundcolor AWT, Swing, JavaFX & SWT 12
S Metal-Buttons so aussehen lassen wie Nimbus Buttons? AWT, Swing, JavaFX & SWT 3
Fu3L Keine Transparenten JTextComponents möglich mit Nimbus L&F? AWT, Swing, JavaFX & SWT 5
S Swing JTable in Nimbus AWT, Swing, JavaFX & SWT 4
O nimbus Abbrechen ok vertauscht AWT, Swing, JavaFX & SWT 2
E Look & Feel - Nimbus AWT, Swing, JavaFX & SWT 12
A Nimbus eigener Painter funzt nicht AWT, Swing, JavaFX & SWT 11
data89 Nimbus Look and Feel als gepackte JAR-Datei AWT, Swing, JavaFX & SWT 3
T Swing: TaskPane mit Nimbus LnF? AWT, Swing, JavaFX & SWT 4
M Problem Nimbus Look&Feel AWT, Swing, JavaFX & SWT 2
oliver1974 Nimbus Look & Feel und die Ausgaben nach Standardaus. AWT, Swing, JavaFX & SWT 4
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX ProgressBar AWT, Swing, JavaFX & SWT 10
T Starten des Programms mit dem Progressbar AWT, Swing, JavaFX & SWT 2
L Progressbar Laufzeitveränderung AWT, Swing, JavaFX & SWT 4
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
B JavaFX Textfields: Fortschritt als ProgressBar und Progressindicator AWT, Swing, JavaFX & SWT 5
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
I JavaFX Im Controller die ProgressBar mit Task updaten AWT, Swing, JavaFX & SWT 6
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
Z ProgressBar in Eclipse mit Wizard page? AWT, Swing, JavaFX & SWT 1
W Swing ProgressBar update AWT, Swing, JavaFX & SWT 4
A JavaFX Eine Task mit einer ProgressBar verbinden AWT, Swing, JavaFX & SWT 0
P Swing Die ProgressBar wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
B SWT Progressbar mit Textoverlay? AWT, Swing, JavaFX & SWT 3
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
T Prozessstatus in Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Swing Progressbar aktualisiert sich nicht AWT, Swing, JavaFX & SWT 17
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
V Swing Progressbar Problem AWT, Swing, JavaFX & SWT 14
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
Tobse LookAndFeel [Windows7] Nativ aussehnde ProgressBar AWT, Swing, JavaFX & SWT 13
J Progressbar mit einfacher Funktion AWT, Swing, JavaFX & SWT 6
D Progressbar AWT, Swing, JavaFX & SWT 5
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
S Upload Progressbar AWT, Swing, JavaFX & SWT 3
S Dateien kopieren mit ProgressBar AWT, Swing, JavaFX & SWT 6
S Swing ProgressBar AWT, Swing, JavaFX & SWT 3
S SWT ProgressBar: Value/Selection anzeigen AWT, Swing, JavaFX & SWT 4
D SWT JFace Wizard Progressbar AWT, Swing, JavaFX & SWT 4
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
ModellbahnerTT Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
P Progressbar in java AWT, Swing, JavaFX & SWT 3
K Frage zu ProgressBar, SwingWorker etc. AWT, Swing, JavaFX & SWT 4
V ProgressBar AWT, Swing, JavaFX & SWT 5
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
M Bug; Swing-Worker, Progressbar und Mouse AWT, Swing, JavaFX & SWT 22
P [SWT] - ProgressBar, Prozentzahlen live anzeigen geht nicht AWT, Swing, JavaFX & SWT 13
P JTable sortiert ProgressBar nicht AWT, Swing, JavaFX & SWT 8
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
B Eine Alternative zur Steuerung einer ProgressBar? AWT, Swing, JavaFX & SWT 5
N ProgressBar --> brauche Hilfe AWT, Swing, JavaFX & SWT 4
G Progressbar aktualisiert sich nicht (vernünftig). WIESO? AWT, Swing, JavaFX & SWT 2
S Anzeige einer Progressbar. AWT, Swing, JavaFX & SWT 3
M Bild laden + ProgressBar AWT, Swing, JavaFX & SWT 2
C Problem mit ProgressBar AWT, Swing, JavaFX & SWT 4
thE_29 Problem mit ProgressBar AWT, Swing, JavaFX & SWT 2
M ProgressBar in einem Thread? AWT, Swing, JavaFX & SWT 4
C ProgressBar AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben