Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[SWING] Kunststoff L&F setzen

1 view
Skip to first unread message

Christian Hauser

unread,
Jul 8, 2002, 5:52:06 AM7/8/02
to
Ich bin am entwickeln eines Vokabel-Trainers, damit ich meine
Spanisch-Vokabeln (hoffentlich) besser lerne. Für dieses Programm
möchte ich nun das Kunststoff LookAndFeel setzen, das ich in einem
(vom Programm aus gesehen) Unterverzeichnis \ext speichere.

Nun habe ich folgenden Code im Konstruktor, weiss jedoch nicht, ob das
am Anfang oder am Schluss des Konstruktors (vor setVisible(true))
einbauen soll:

// Kunststoff Look-and-Feel setzen
URLClassLoader loader = null;
Class cplaf = null;
LookAndFeel plaf = null;
try {
loader = new URLClassLoader(new URL[] {new
File("./ext/kunststoff.jar").toURL()});
cplaf =
loader.loadClass("com.incors.plaf.kunststoff.KunststoffLookAndFeel");
plaf = (LookAndFeel)cplaf.newInstance();
}
catch (Exception e) {
// Hier würde ich eigentlich gerne das Metal LookAndFeel
// nehmen, weiss jedoch noch nicht genau wie...
System.exit(1);
}

try {
UIManager.setLookAndFeel(plaf);
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception e) {
e.printStackTrace();
System.exit(0);
}


Wenn ich das jedoch so mache, bekomme ich ein paar Exceptions:
UIDefaults.getUI() failed: no ComponentUI class for:
javax.swing.JMenuBar[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.DefaultMenuLayout,alignmentX=null,alignmentY=null,border=javax.swing.plaf.metal.MetalBorders$MenuBarBorder@288051,flags=392,maximumSize=,minimumSize=,preferredSize=,margin=,paintBorder=true]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:686)
at javax.swing.UIDefaults.getUI(UIDefaults.java:716)
at javax.swing.UIManager.getUI(UIManager.java:784)
at javax.swing.JMenuBar.updateUI(JMenuBar.java:125)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1090)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1082)
at spanisch.VokabelTrainer.<init>(VokabelTrainer.java:114)
at spanisch.VokabelTrainer.main(VokabelTrainer.java:934)
UIDefaults.getUI() failed: no ComponentUI class for:
javax.swing.JMenu[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@e1a408,flags=264,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Datei]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:686)
at javax.swing.UIDefaults.getUI(UIDefaults.java:716)
at javax.swing.UIManager.getUI(UIManager.java:784)
at javax.swing.JMenu.updateUI(JMenu.java:192)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1090)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1082)
at spanisch.VokabelTrainer.<init>(VokabelTrainer.java:114)
at spanisch.VokabelTrainer.main(VokabelTrainer.java:934)
UIDefaults.getUI() failed: no ComponentUI class for:
javax.swing.JMenu[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@e1a408,flags=264,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Trainers]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:686)
at javax.swing.UIDefaults.getUI(UIDefaults.java:716)
at javax.swing.UIManager.getUI(UIManager.java:784)
at javax.swing.JMenu.updateUI(JMenu.java:192)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1090)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1082)
at spanisch.VokabelTrainer.<init>(VokabelTrainer.java:114)
at spanisch.VokabelTrainer.main(VokabelTrainer.java:934)
UIDefaults.getUI() failed: no ComponentUI class for:
javax.swing.JMenu[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@e1a408,flags=264,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Optionen]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:686)
at javax.swing.UIDefaults.getUI(UIDefaults.java:716)
at javax.swing.UIManager.getUI(UIManager.java:784)
at javax.swing.JMenu.updateUI(JMenu.java:192)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1090)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1082)
at spanisch.VokabelTrainer.<init>(VokabelTrainer.java:114)
at spanisch.VokabelTrainer.main(VokabelTrainer.java:934)
UIDefaults.getUI() failed: no ComponentUI class for:
javax.swing.JMenu[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@e1a408,flags=264,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Hilfe]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:686)
at javax.swing.UIDefaults.getUI(UIDefaults.java:716)
at javax.swing.UIManager.getUI(UIManager.java:784)
at javax.swing.JMenu.updateUI(JMenu.java:192)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1090)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1101)
at
javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1082)
at spanisch.VokabelTrainer.<init>(VokabelTrainer.java:114)
at spanisch.VokabelTrainer.main(VokabelTrainer.java:934)


Das funktioniert alles, wenn ich in Eclips mittels "Add External JAR"
das kunststoff.jar einbaue, aber das möchte ich nicht.

Vielen Dank im voraus für alle Tipps.

Gruss, Hausi

Stefan Meyer

unread,
Jul 8, 2002, 5:53:01 AM7/8/02
to

[...]

>
> Das funktioniert alles, wenn ich in Eclips mittels "Add External JAR"
> das kunststoff.jar einbaue, aber das möchte ich nicht.
>
> Vielen Dank im voraus für alle Tipps.
>
> Gruss, Hausi
>

ich habe gerade auch eine projekt mit div. L&F. Die entsprechenden
Jar-Dateien sind in meinem CLASSPATH und umgeschaltet wird per :

[...]

String metal = "javax.swing.plaf.metal.MetalLookAndFeel";
String kunstoff = "com.incors.plaf.kunststoff.KunststoffLookAndFeel";

[...]

UIManager.setLookAndFeel(kunstoff);
SwingUtilities.updateComponentTreeUI(sm.getFrame());

gruss

stefan

Stefan Meyer

unread,
Jul 8, 2002, 5:55:01 AM7/8/02
to

ups, kommt vom kopieren .. soll heissen :

SwingUtilities.updateComponentTreeUI(myFrame);

>
> gruss
>
> stefan
>

Christian Hauser

unread,
Jul 8, 2002, 6:15:04 AM7/8/02
to
>>
>> ich habe gerade auch eine projekt mit div. L&F. Die entsprechenden
>> Jar-Dateien sind in meinem CLASSPATH und umgeschaltet wird per :
>>
>> [...]
>>
>> String metal = "javax.swing.plaf.metal.MetalLookAndFeel";
>> String kunstoff = "com.incors.plaf.kunststoff.KunststoffLookAndFeel";
>>
>> [...]
>>
>> UIManager.setLookAndFeel(kunstoff);
>> SwingUtilities.updateComponentTreeUI(myFrame);

Eigentlich ist mein CLASSPATH in Ordnung. Eigentlich scheint mir alles
in Ordnung zu sein, dennoch schaff ich es nicht, die Applikation mit dem
Kunststoff L&F zu starten. Und all diese Exceptions, die ich erhalte
helfen mir irgendwie nicht weiter. (Vielleicht bin ich aber einfach noch
zu schwach heute...)

:-(

Linda Radecke

unread,
Jul 8, 2002, 6:56:39 AM7/8/02
to

Christian Hauser wrote:

> Eigentlich ist mein CLASSPATH in Ordnung. Eigentlich scheint mir alles
> in Ordnung zu sein, dennoch schaff ich es nicht, die Applikation mit dem
> Kunststoff L&F zu starten. Und all diese Exceptions, die ich erhalte
> helfen mir irgendwie nicht weiter. (Vielleicht bin ich aber einfach noch
> zu schwach heute...)
>
> :-(

Ich habe das JAR im jre/lib/ext-Verzeichnis(keinen Classpath gesetzt),
und es funktioniert dann problemlos mit dem ueblichen setLookAndFeel()
vom UIManager, sobald ich eines setze, mein default L&F habe ich in
einer swing.properties - Datei gesetzt. Hier habe ich noch ein paar
Notizen zum Kunststoff-L&F setzen: http://www.jalice.net/lafsite.htm

Vielleicht nuetzt dir das ja noch etwas.

Linda
--
(=)
/ li...@jalice.ch - http://www.jalice.net
(=)
/ l.ra...@hswzfh.ch - http://www.hswzfh.ch
(=)

Carl Rosenberger

unread,
Jul 8, 2002, 7:53:17 AM7/8/02
to
Christian Hauser wrote:
> // Kunststoff Look-and-Feel setzen
> URLClassLoader loader = null;
> Class cplaf = null;
> LookAndFeel plaf = null;
> try {
> loader = new URLClassLoader(new URL[] {new
> File("./ext/kunststoff.jar").toURL()});
> cplaf =
> loader.loadClass("com.incors.plaf.kunststoff.KunststoffLookAndFeel");
> plaf = (LookAndFeel)cplaf.newInstance();
> }
> catch (Exception e) {
> // Hier würde ich eigentlich gerne das Metal LookAndFeel
> // nehmen, weiss jedoch noch nicht genau wie...
> System.exit(1);
> }

Ohne jetzt genau zu wissen, wovon ich schreibe, sieht das da oben
für mich so aus als würde Deine Applikation mit einem anderen
ClassLoader arbeiten.

Du kannst dem PLaF mit folgender Zeile nachträglich sagen, welcher
ClassLoader verwendet werden soll:

UIManager.getLookAndFeelDefaults().put( "ClassLoader",
this.getClass().getClassLoader() );

...wobei "this" irgendein Objekt in Deinem momentanen ClassLoader
Kontext sein kann.

Die obige Zeile ist übrigens ein Muss für Java Webstart und auch
eine typische Swing FAQ.

Man braucht die Zeile für Java Webstart auch dann, wenn man den
einfachsten Weg geht, um Kunsstoff zu Beginn des Programmes zu
laden:

try {
UIManager.setLookAndFeel(new KunststoffLookAndFeel());
}
catch (UnsupportedLookAndFeelException e) {
System.out.println("Danke für Kunststoff, Jan. Schick nochmal ne Palette bitte.");
}

Viele Grüsse,
Carl


Christian Hauser

unread,
Jul 8, 2002, 3:23:28 PM7/8/02
to
Hallo Linda

> Ich habe das JAR im jre/lib/ext-Verzeichnis(keinen Classpath gesetzt),
> und es funktioniert dann problemlos mit dem ueblichen setLookAndFeel()
> vom UIManager, sobald ich eines setze, mein default L&F habe ich in
> einer swing.properties - Datei gesetzt. Hier habe ich noch ein paar
> Notizen zum Kunststoff-L&F setzen: http://www.jalice.net/lafsite.htm
>
> Vielleicht nuetzt dir das ja noch etwas.
>
> Linda

Ich möchte mein Programm auch anderen (nicht Informatikern, die mit mir
Spanisch nehmen) zur Verfügung stellen. Und da wäre ich froh, wenn ich
das L&F in einem Unterverzeichnis gleich mitliefern kann.

Aber jetzt funktioniert alles (Ich hatte keine Probleme, wenn ich es von
Hand kompilierte und ausführte, sondern nur innerhalb Eclipse).

Gruss, Hausi

PS: Informative Homepage! Weiter so! ;-)

Christian Hauser

unread,
Jul 8, 2002, 3:26:13 PM7/8/02
to
> Du kannst dem PLaF mit folgender Zeile nachträglich sagen, welcher
> ClassLoader verwendet werden soll:
>
> UIManager.getLookAndFeelDefaults().put( "ClassLoader",
> this.getClass().getClassLoader() );
>
> ...wobei "this" irgendein Objekt in Deinem momentanen ClassLoader
> Kontext sein kann.
>
> Die obige Zeile ist übrigens ein Muss für Java Webstart und auch
> eine typische Swing FAQ.


Hallo Carl

Vielen Dank für den Tipp. Jetzt läuft es (fürs erste).

Gruss, Hausi (mit WebStart noch wenig am Hut habend...)

0 new messages