Fenster aktualisieren

ICHE9

Grünschnabel
Hi,
ich möchte während mein Programm läuft das Look & Feel ändern. Mit:
Code:
UIManager.setLookAndFeel(Look and Feel Class Name Here);
SwingUtilities.updateComponentTreeUI(JFrame goes here);
klappts soweit ganz gut, nur leider wird der Inhalt der Textarea nicht angepasst und ein Label wird auch nicht angepasst. Die anderen Komponenten wie Menüleiste, Labels und Buttons werden angepasst.
Ich hoffe mir kann jemand helfen:).

Gruß
ICHE9
 
Ich hab das selbe Problem. In meiner Applikation habe ich ein Menü integriert bei dem mehrere Look and Feels zur Auswahl stehen. Nun möchte ich das beim klicken auf eines der Look and Feels sich die GUI auch ändert, doch das funktioniert nicht sauber. Oft bleiben einige Komponente dem alten Look and Feel verfallen oder ändern sich zwar, doch die Konturen oder Farben bleiben die des alten Look and Feel.

Ich frag mich jetzt, ob es neben SwingUtilities.updateComponentTreeUI eine weitere möglichkeit gibt. Vieleicht irgend ein Reset oder so, damit sich die gesammte GUI wie beim neustart aufbaut?

Zurzeit hab ich die Notlösung die dem Anwender sagt, er solle die Applikation neustarten um die Änderungen wirtksam zu machen. Doch fällt es mir schwer zu glauben das bei dieser ausgezeichneten Swing API es doch nicht eine alternative, on-the-fly Lösung gibt :rolleyes:
 
Zuletzt bearbeitet von einem Moderator:
Die Frage ist hier viel mehr auf welchen Container du updateComponentTreeUI anwendest. Im FileChooserDemo wird dies auf das JFrame angewendet. Versuche das mal.
 
Ich wende die SwingUtilities.updateComponentTreeUI auf einen JFrame. Bei den default Look and Feels sehe ich keine Schwierigkeiten, eher wenn ich externe Look and Feels einsetze. Weil aber beim neustart auch alles wunderbar funktioniert müsste es doch möglich sein das irgendwie zu reseten.

Die FileChooserDemo auf Oracle (FileChooserDemo.java) hilft nicht wirklich weiter weil die Demo nicht einmal SwingUtilities.updateComponentTreeUI einsetzt geschweige irgendwo das setLookAndFeel. Kann es sein das du dich auf ein anderes Projekt bezogen hast?

Validate hat beim JFrame auch nicht zum gewünschten effekt geführt.

Ein Problem hatte ich letztes mit dem Tonic Look and Feel das beim JToolBar den zwischenraum mit add(Box.createHorizontalGlue) ignoriert. Dieses Verhalten bleibt auch bestehen wenn wieder zum Metal Look and Feel gewechselt wird (deshalb die Idee mit dem reseten). Provisorisch hab ich jetzt aber mal das Tonic Look and Feel rausgeschmissen.

Probleme macht auch das Napkin Look and Feel weil beim zurückschalten auf das Metal Look and Feel bleiben die Konturen der Buttons dem alten Napkin Look and Feel treu. Ich glaube ich werde um einen Reset nicht herum kommen, fragt sich nur wie das funktioniert. Technisch müsste das eigentlich möglich sein, weil beim neustart alle Look and Feels sauber funktionieren.

Und ich hab da noch eine Frage, gibt es eine Methode die alle Root Komponente auflistet? Oder muss ich wie beim dynamischen i18n Ansatz (hier beschrieben) mit Listener arbeiten die beim wechseln der LAFs allen Root Komponenten informieren sie sollen sich selbst mit SwingUtilities.updateComponentTreeUI updaten?
 
Zuletzt bearbeitet von einem Moderator:
Die FileChooserDemo auf Oracle http://download.oracle.com/javase/t...moProject/src/components/FileChooserDemo.java hilft nicht wirklich weiter weil die Demo nicht einmal SwingUtilities.updateComponentTreeUI einsetzt geschweige irgendwo das setLookAndFeel. Kann es sein das du dich auf ein anderes Projekt bezogen hast?

JA -.-' *Kopf @ Tastatur* ...
... nämlich auf das hier : %JDK_HOME%/demo/jfc/FileChooserDemo/
Falls du es jemals für nötig gehalten hast dir diesen Ordner überhaupt anzusehen -.-'

Und wie sieht es aus wenn du folgendes machst :
1) JFrame.updateComponentTreeUI()
2) JFrame.validate()
3) JFrame.update(JFrame.getGraphics())

sollte EIGENTLICH funktionieren.

Ansonsten auch die Frage : passiert dir das auch wenn du zwischen den bereits vorinstallierten L&F umschaltest oder nur wenn du ein CUSTOM-L&F verwendest ? Falls ja : fehlerhafte implementierung der CUSTOM-L&F
 
Zuletzt bearbeitet von einem Moderator:
Hab die Demo gefunden, wusste halt nich das beim Diablo JDK (JDK für FreeBSD) auch Demos mit geliefert werden. Aber es wird wohl an der implementierung an den Custom L&Fs liegen weil auch mit JFrame.updateComponentTreeUI, JFrame.validate und JFrame.update(JFrame.getGraphics) bleibt das Problem bei den Custom L&Fs bestehen. Bei den integrierten L&Fs scheint alles zu funktionieren, zumindest soviel ich testen konnte.

Werde nun halt eine on the fly änderung implementieren für Look and Feels die das unterstützen und diejenigen die einen neustart benötigen den Anwender mit einer MessageBox informieren das ein neustart nötig sei um das Look and Feel einzusetzen.
 
Ähm ... warum verwendest du kein Sun Java ?
Falls du das RPM nicht installiert bekommst nimm das extract-Binary ... dieses entpackst du dann mit root in /opt/sun-jdk-1.6_xx und setzt mit (update-)alternatives java , javac , jar und das Java-Plugin ...
Falls du da genauere Infos brauchst kann ich dir da gerne helfen.
Da ich jetzt so keine Links zu den Custom-L&F hab kann ich natürlich nicht prüfen ob es daran liegt. *Das hättest du auch gleich in den ersten Post schreiben können.* Falls es mit dem Sun-JDK läuft solltest du dein Programm so schreiben das du darauf prüfst und bei einem Fehler eine Warnmeldung ausgibst das ein Sun-JDK verlangt wird *sehr einfach : einfach eine Klasse aus sun.* oder com.sun.* laden > bei Fehlschlag : KEIN Sun*.
Falls selbst das Sun-JDK nicht liegt es tatsächlich an den implementierungen.
 
Bei FreeBSD (ist kein Linux) gibts zwei Ports für SUN, zum einen das linux-sun-jdk16 und das diablo-jdk. Das erste ist die offizielle JDK von SUN und läuft auf einer Application Binary Interface (ABI), also einem Linux Emulator auf FreeBSD. Das zweite ist die native Java unstertützung für FreeBSD die auf den gleichen Quellcodes wie SUN ausgelieferte Linux basiert (die haben dafür eine Sonderlizenz mit SUN verhandelt, siehe Link). Deshalb sollte es geientlich kaum unterschiede zwischen Diablo JDK und dem SUN JDK für Linux geben. Diablo JDK bestand auch den "Sun's Compatibility Test Suite".

Aber ich werden jetzt doch noch das linux-sun-jdk16 installieren und dann wissen wir es genauer :D

Das sind die externen Look and Feels die ich zurzeit einsetze:
com.easynth.lookandfeel.EaSynthLookAndFeel
net.sourceforge.napkinlaf.NapkinLookAndFeel
com.nilo.plaf.nimrod.NimRODLookAndFeel
com.pagosoft.plaf.PgsLookAndFeel
ch.randelshofer.quaqua.QuaquaLookAndFeel
de.muntjak.tinylookandfeel.TinyLookAndFeel
 
Also ich habe ALLE L&F ausprobiert. Einige sehen sogar ganz gut aus. Aber ich bleibe dann doch stilbewusst beim Sun-Standard "Metal-L&F".
Ich habe alle L&F ins 2D-Demo geladen in dem man ja das L&F dynamisch ändern kann. Beim dynamischen Umschalten traten keine Darstellungsfehler auf. Es kann aber auch daran liegen das ich mit -Dsun.java2d.d3d=false das 3D-Rendering deaktiviert habe weil mein ATI-Triber v11 mit CCC2 extreme Probleme verursacht. Beim danymischen Laden hat das ändern gedauert ... aber falls das L&F zum Boot bekannt ist gehts sehr schnell.
 

Neue Beiträge

Zurück