Auf die im Look and Feel eingestellten Farben zugreifen

jawa

Mitglied
Hallo,

in meiner Anwendung verwende ich eigene ListCellRenderer und TreeCellRenderer und will nun dort die richtigen Text- und Hintergrundfarben setzen, je nachdem ob ein Item selektiert ist oder nicht.

Das funktioniert auch, ich habe nur ein Problem, die richtigen Farben zu wählen. Am besten fände ich es, wenn die im System eingestellten Farben verwendet würde.

Dazu gibt es ja SystemColor. Nun habe ich festgestellt, dass diese Farben nur dann den im System eingestellten entsprechen, wenn das System-Look-and-Feel eingestellt ist. Wechsle ich zum Beispiel zu Metal, dann sehen selektierte Items, bei denen ich keinen eigenen CellRenderer verwende, anders aus (ist verständlich, was ich meine?).

Ideal wäre jetzt, immer die Farben zu verwenden, die im einstellten Look-and-Feel verwendet werden. Verwendet der Benutzer das System-PLAF, wären das dann auch die System-Farben.

Weiss jemand, wie das geht?

Tschüss,
jawa
 
Hallo,

vielleicht hilft dir das weiter:

Java:
import java.awt.Color;
import java.util.*;
import java.util.Map.Entry;
import javax.swing.UIManager;

/**
 * Generate a list of UIManager color keys.
 */
public class UIManagerColorKeys
{
	public static void main(String[] args) throws Exception
	{
		List<String> colorKeys = new ArrayList<String>();
		Set<Entry<Object, Object>> entries = UIManager.getLookAndFeelDefaults().entrySet();
		for (Entry entry : entries)
		{
			if (entry.getValue() instanceof Color)
			{
				colorKeys.add((String) entry.getKey());
			}
		}

		// sort the color keys
		Collections.sort(colorKeys);

		// print the color keys
		for (String colorKey : colorKeys)
		{
			System.out.println(colorKey);
		}

	}
}

Den Code habe ich irgendwo im Netz mal gefunden. Er listet die Schlüsselbegriffe für die Farben auf.

Mit z. B.
Java:
Color Muster = UIManager.getColor("ScrollBar.thumbShadow");
weißt du "Muster" die Farbe zu, die sich hinter dem Schlüsselbegriff "ScrollBar.thumbShadow" verbirgt. Aber Achtung: Ich glaube gelesen zu haben, das nicht alle Schlüsselbegriffe auch in jedem L&F belegt sind bzw. belegt sein müssen. Sorge also dafür, daß du im Zweifelsfall eine Ersatzfarbe zur Verfügung stellst.

MfG
hansmueller
 
Hallo.
Gerade bei Renderern kann man auf die Farben der Komponente zugreifen:
Java:
myList.getBackground();
myList.getForeground();
myList.getSelectionForeground();
myList.getSelectionBackground();
...sollte bei fast jeder Komponente (JList, JTree, JTable) gehen. Das liefert die L&F-abhängigen Farben zurück.
Ansonsten muss man diese über
Code:
UIManager.getColor("Textfield.background")
(als Bsp) holen. Hier ist aber immer die Frage nach dem Schlüsselwort.
 

Neue Themen


Zurück
Oben