# JTextField.setBackground ohne auswirkung



## kale1990 (22. Sep 2009)

Folgender Code:


```
JTextField jtf = new JTextField();
jtf.setBounds(...);
jtf.setFont(...);

jtf.addFocusListener(FieldFocusListener);        // Setzt bei focus die Farbe auf RED bei focusLost auf YELLOW
jtf.setBackground(Color.RED)

win.add(jtf);                             // win ist vom typ JPanel
```

hier wirkt sich das setzten der Farbe auf Rot nicht aus.
Wird das Feld jetzt fokusiert wird es Rot und verliert es den Focus wird es Geld...also die änderungen im FocusListener wirken sich aus. Das setzten direkt beim erstellen nicht.
Welche Gründe kann das haben?

hab gerade noch was herausgefunden:


```
jtf.paint(jtf.getGraphics());
```

wenn ich diese anweisung nach dem win.add(...) aufrufe, wird die farbe richtig gemalt...aber es kann nur noch mit der maus fokusiert werden


----------



## RxSchuster (22. Sep 2009)

Versuche mal invokeLater zu benutzen.
SwingUtilities (Java Platform SE 6))

Nach dem ändern der Komponente muss sie auch neu gezeichnet werden: repaint()


----------



## kale1990 (22. Sep 2009)

was soll ich dann in invokeLater ausführen?
das mit dem repaint nützt irgendwie nichts!


----------



## KrokoDiehl (22. Sep 2009)

Hm, interessant. Mal probiert das 
	
	
	
	





```
setBackground()
```
 nach dem 
	
	
	
	





```
add()
```
-Aufruf zu machen? Spontan vermute ich, dass das Textfeld dann seine Farben vom Container und Look&Feel erbt und daher deine Einstellung überschrieben wird.


----------



## kale1990 (22. Sep 2009)

ja das hab ich leider schon probiert...das hilft auch nichts.


----------



## KrokoDiehl (22. Sep 2009)

Also das folgende, kleine Beispiel tut problemlos. Daher ist meine Vermutung ohnehin passé. Der Fehler bei dir muss irgendwo anders liegen, bzw. an einem anderen Umstand hängen. Vielleicht wird irgendwo zw. Erstellen und Anzeigen die Hintergrundfarbe nochmal überschrieben.
An deinem Bsp-Code sehe ich zumindest kein Fehler oder Hinweis auf einen.


```
public class Test
{
    public static void main(String[] args)
    {
    	JTextField fld = new JTextField("Huhu");
    	fld.setBackground(Color.red);
    	
    	final JFrame f = new JFrame("Hallo");
    	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	f.add(fld, BorderLayout.CENTER);
    	
    	SwingUtilities.invokeLater(new Runnable()
		{
    		@Override
			public void run()
			{
				f.pack();
				f.setVisible(true);
			}
		});
    } //main
}
```
(hier siehst du auch, was _RxSchuster_ mit _invokeLater_ meint.


----------



## kale1990 (22. Sep 2009)

habe grade festgestellt, das das feld auch den farbwert enthält, welchen ich mit setBackground() gesetzt habe.
es wird aber so nicht angezeigt....
komische sache, vorallem wird ja repaint() bei setBackground() auch aufgerufen....
sonst noch jemand net idee an was es liegen könnt?


----------



## RxSchuster (22. Sep 2009)

Probier mal setOpaque(true).
Damit stellst du ein, ob die Componente durchsichtig ist oder nicht, also auch ob der Hintergrund gezeichnet wird oder nicht.


----------



## kale1990 (23. Sep 2009)

opaque ist scho auf true...


----------



## babuschka (1. Dez 2009)

Hallo Leute!

Auch ich habe das Problem. Unter WinXP wird die Hintergrundfarbe vom JTextField gesetzt, unter Ubuntu (GNOME) leider nicht. Da behält es einfach seine Standardfarbe

opaque habe ich auf true und background lege ich im GUI Designer von NetBeans fest und rühre die Farbe nicht mehr an.

Hat jemand eine Idee, woran das liegen könnte oder ähnliche Erfahrungen gemacht?

Danke und Gruß
JAR

#edit1
Okay, das System Look & Feel GTK+ unterstützt es nicht, die Hintergrundfarbe von Eingabefeldern zu setzen!


----------

