Look and Feel auflisten


#1

Moin,

ich verwende das LaF von http://www.jtattoo.net. Wird über IntelliJ im Classpath auch eingebunden und ich kann das, mir gefallende, LaF verwenden.

Nun wollte ich dem Benutzer die Möglichkeit geben ein eigenes LaF auszuwählen. Dazu muss ich mir die vorhanden LaF auflisten lassen.

	for(UIManager.LookAndFeelInfo l : UIManager.getInstalledLookAndFeels()) logger.info("LAF: " + l.getName());
	// -- null -- for(LookAndFeel l : UIManager.getAuxiliaryLookAndFeels()) logger.info("AUX: " + l.getName());
	logger.info("verwendet: " + UIManager.getLookAndFeel().getName());

Als Ausgabe bekomme ich aber nur die 4 üblichen LaF von Java. Die von JTatto fehlen dabei.

system	INF	LAF: Meta
system	INF	LAF: Nimbus
system	INF	LAF: CDE/Motif
system	INF	LAF: GTK+
system	INF	verwendet: Aluminium

Wie komme ich an die LaF von JTatto (ohne Sie jetzt manuell in eine Datei zu packen)?

mfg, mogel


#2

Eigentlich garnicht.

Entweder in eine Datei packen.
Oder zur Laufzeit alle Klassen (wenn es nur um JTattoo geht, nur die im Package com.jtattoo.etc) durchgehen und Testen ob sie eine Sub Klasse von LookAndFeel sind und auflisten oder dem UIManager bekanntmachen.
Oder durch magische Schritte während dem Compilieren eine Auflistung der LookAndFeels erstellen und dies dann dem UIManager bekanntmachen. (Stichwort Annotation Processing)

Aber ich würde sagen, hol die auf der Seite die Sourcen und mach das ganze von Hand. Geht schneller.


#3
  • In die Docs geschaut? Der Link ist hier: https://docs.oracle.com/javase/7/docs/api/javax/swing/UIManager.html
  • Neben getInstalledLookAndFeels() gibts auch getDefaults(). Das ist vielleicht ein bisschen confusing.
  • getDefaults() “durchläuft” mehrere Punkte. Vielleicht mit “cross platform look and feel.” auch das JTatto LaF.
  • getInstalledLookAndFeels() “durchläuft” das vielleicht nicht.
  • LaFs müssen auf bestimmte Art da rein

#4

Ja, das wollt ich schreiben (vielleicht) :wink: Der richtige Begriff.


#5

in Quelltext geschaut - der Link ist hier

scnr, wirklich S


#6

das Aluminium-LaF erbt von AbstractLookAndFeel - welches wiederum MetalLookAndFeel beerbt. Damit ist die ganze Geschichte mit Laufzeit-Testen gestorben. Ich werde einfach eine Datei mit allen Namen erstellen und gut ist.


#7

Um mal an alle Klassen heranzukommen

Wenn man die Klassen hat abstract und Interfaces aussortieren
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getModifiers()

Zu guter Letzt Testen ob es sich um ein LookAndFeel handelt, bzw. ein LookAndFeelInfo, dass dann zum LookAndFeel führt
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)

Ob es das wert ist musst du selbst entscheiden. Aber manuell ist auch eine gute Lösung.


#8

?
Das wäre die nächste Eskalationsstufe. :blush:

Edit: Achso, du meinst deinen Quelltext… … … (Ja ich bezog mich ja darauf)