Look & Feel wird nicht korrekt angezeigt

Status
Nicht offen für weitere Antworten.

Randall

Bekanntes Mitglied
Ich setze zu beginn des Programms in der main-Methode folgenden Code um das LookAndFeel zu setzen:

Code:
try {			
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");			
    }
catch (Exception e) { }


Das LookAndFeel wird aber nicht richtig angenommen, wird doch das XP übliche Design verwendet.
 
Also, eine Exception wird nicht geworfen. Habe es nun mit folgendem Code probiert:

Code:
public static void main(String[] args) {
  System.out.println(UIManager.getLookAndFeel());			

  // LookAndFeel setzen 
    try {			
           UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
         }
    catch (Exception e) {System.out.println("Fehler beim setzen des LookAndFeel: "+e);};
    
    System.out.println(UIManager.getLookAndFeel());

Die System-Ausgabe wie folgt:

[The Java(tm) Look and Feel - javax.swing.plaf.metal.MetalLookAndFeel]
[The Java(tm) Look and Feel - javax.swing.plaf.metal.MetalLookAndFeel]


Also scheint alles in Ordnung zu sein. Komischerweise wird das LookAndFeel nicht richtig angezeigt, es bleibt auf dem System-LookAndFeel (XP).

Seltsamerweise funktioniert es mit dem dritten LookAndFeel im Bunde:


Code:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

Eine Idee, woran das liegen könnte?
 
Ich erzeuge ein JFrame, habe die Klasse natürlich auch von JFrame abgeleitet.

Aus dem awt hab ich folgendes importiert:

Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

Diese muss ich ja aus dem awt importieren und gebrauchen ? Könnte das Problem darin versteckt liegen? Dass, was ich meines wissen mit Swing machen kann, habe ich auch mit Swing-Komponenten gemacht.
 
Nö, diese AWT-Dinger stören da nicht (wie du selbst sagst, ohne die geht es gar nicht).

Hm, ist das dort oben dein Originalcode, oder hast du bereits vor dem Wechsel des LaF dein JFrame hergestellt?

Falls ja, ruf mal auf:
Code:
SwingUtilities.updateComponentTreeUI( dasFrame );
 
Nö, das Fenster erzeuge ich erst ganz zum Schluss der Main-Methode. Hier die Original-Main-Methode.


Code:
// Main-Methode 	
	
	public static void main(String[] args) {
		System.out.println(UIManager.getLookAndFeel());			
  // LookAndFeel setzen 
		try {			
			UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
		}
	    catch (Exception e) {System.out.println("Fehler beim setzen des LookAndFeel: "+e);};
	    
	    System.out.println(UIManager.getLookAndFeel());
	    
  // Bildschirmgrösse ermitteln und für Fenstergrösse anpassen
	    SukeLogical sxSize = new SukeLogical();
	    SukeLogical sySize = new SukeLogical();
	    screenWidth = sxSize.getSizeX();
	    screenHeight = sySize.getSizeY()-35;	    
	    
  // Hauptfenster erzeugen	
		mainframe = new SukeMainFrame("SUKE Verwaltungsprogramm",0,0,screenWidth, screenHeight);
	}


Aber ich habe jetzt einen Weg gefunden. Mit folgender Main-Methode klappt es:



Code:
public static void main(String[] args) {
		System.out.println(UIManager.getLookAndFeel());			
  // LookAndFeel setzen 
		try {			
			UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
			JFrame.setDefaultLookAndFeelDecorated(true);
		}
	    catch (Exception e) {System.out.println("Fehler beim setzen des LookAndFeel: "+e);};	    

	    System.out.println(UIManager.getLookAndFeel());	    

  // Bildschirmgrösse ermitteln und für Fenstergrösse anpassen
	    SukeLogical sxSize = new SukeLogical();
	    SukeLogical sySize = new SukeLogical();
	    screenWidth = sxSize.getSizeX();
	    screenHeight = sySize.getSizeY()-35;	    
	    
  // Hauptfenster erzeugen	
		mainframe = new SukeMainFrame("SUKE Verwaltungsprogramm",0,0,screenWidth,screenHeight );		
	}


Die Zeile

Code:
 JFrame.setDefaultLookAndFeelDecorated(true);

erzeugt das richtige Fenster. Ich hab nämlich festgestellt, dass nur das Fenster selbst im XP-Style war, die Componenten waren die richtigen im Metal-Look. Nun klappt es.
 
Bei mir geht folgender Code nicht:

Code:
    try {
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
    } catch (Exception e) { }
    frame.setDefaultLookAndFeelDecorated(true);

Exception wird keine geworfen und JFrame ist meine Superklasse.

Liebe Grüße
Reality
 
Hat sich erledigt. Ich muss zuerst das LookAndFeel setzen, bevor ich ein Fenster erzeuge.

Liebe Grüße
Reality
 
Jetzt habe ich mir eins runtergeladen und es geht nicht:

java.lang.NoClassDefFoundError: oyoahalnfb/com/oyoaha/swing/plaf/oyoaha/OyoahaLookAndFeel (wrong name: com/oyoaha/swing/plaf/oyoaha/OyoahaLookAndFeel)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:219)
at javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:1677)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:423)
at GUI.main(GUI.java:77)
Exception in thread "main"

Dabei hat JBuilder das Package erkannt. Wenn ich die Unterpackages durch ein Punkt getrennt habe, dann hat mir JBuilder alles aufgelistet.

Code:
    try {
  UIManager.setLookAndFeel("oyoahalnfb.com.oyoaha.swing.plaf.oyoaha.OyoahaLookAndFeel");
} catch (Exception e) { }

EDIT: Ein andere das ich mir gesaugt habe, geht.

Liebe Grüße
Reality
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben