Look & Feel

Hallöchen…
ich sitze vor einem Problem und komme einfach nicht weiter.
Vll. liegt es an meinem Eclipse ?!..
Ich möchte in einem Fenster mit 3 Buttons zwischen den Looks wählen. Also je nachdem welchen Button ich aktiviert habe soll das Fenster z.b. im Windows-Style sein.
Hier mein Programmcode:

package look\_feel;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.\*;

public class Look1 extends JFrame implements ActionListener {

 private JButton[] knopf = new JButton[3];
 // Speichert Informationen der Methode getInstalledLookandFeels
 private LookAndFeelInfo[] erscheinung = UIManager
 .getInstalledLookAndFeels();
 private String[] UIname = { "Metal", "Motif", "Windows" };

 public Look1() {
 super("Metal");
 JPanel platte = new JPanel();
 platte.setLayout(new FlowLayout());
 Box oben = Box.createHorizontalBox();
 oben.setPreferredSize(new Dimension(380, 50));
 platte.add(oben);
 for (int i = 0; i 

Hoffe mir kann jemand weiterhelfen.
Bekomme so komische Fehlermeldungen z.b. in Zeile


     if (quelle == knopf[i]) {
    



--\> java.lang.ArrayIndexOutOfBoundsException

Müsste doch gehen, oder? Hab diese Übung aus einem Buch. Habe dann anschließend die Lösung dazu ausprobiert, aber diese geht auch nicht.

Danke im Voraus
Grüßl, Mömchen

Hallo!

Hoffe mir kann jemand weiterhelfen.
Bekomme so komische Fehlermeldungen z.b. in Zeile

if (quelle == knopf[i]) {

–> java.lang.ArrayIndexOutOfBoundsException

Fehlermeldungen sind die (wenig komische) Folge von Fehlern :wink:

Oben holst du dir mit getInstalledLookAndFeels() eine, zur Laufzeit unbekannte Anzahl von L’n’Fs. Also ist auch das Array von unbekannter Länge. Gleichzeitig aber verdrahtest du die zu erwartende Anzahl fest auf 3. Bei mir z.B. sind es aber 4: „Metal“, „Nimbus“, „CDE/Motif“ und „GTK+“. Wenn also obige Fehlermeldung kommt, dann deswegen, weil du hinter das Array greifst, also bei wenn i == 3. Erstaunlicherweise steht da ein erscheinung.length-1. Das heißt, bei dir müsste getInstalledLookAndFeels() sogar mind. 5 L’n’Fs zurückgeben, damit es kracht. Gib’ die erkannten L’n’Fs mal in einer Schleife aus.

Jan

Hey…
erstmal danke :smile:
Bin auch dahinter gekommen, dass wohl wirklich ein Fehler im Array vorliegt. Bei mir sinds auch 4, statt 3…
Allerdings hatte ich vorher schon deswegen rumprobiert.
Dann bekomme ich zwar keine Fehlermeldung mehr, allerdings ändert sich das Fenster bei mir auch nicht.
Könntest du vll. mal probieren, ob es bei dir geht?
Vielleicht liegts einfach nur an meinem Eclipse…
*hmm*
Grüßl, Mömchen

Hey…
so noch ein Anlauf.
Bei mir sinds 5:
-Metal javax.swing.plaf.metal.MetalLookAndFeel
-Nimbus com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
-CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel
-Windows com.sun.java.swing.plaf.windows.WindowsLookAndFeel
-Windows Classic com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel

Läuft natürlich nach wie vor nicht so wie ich will… :frowning:
Grüßl

Logisch. Die Zuordnung stimmt nicht. „Windows“ kommt bei dir auf dem 3. Button, aber in der Liste der erkannten L’n’Fs erst an 4. und 5. Stelle. Du darfst absolut nichts fest verdrahten. Wenn das Programm 5 L’n’Fs erkennt, muss du da auch dynamisch 5 Button erzeugen.

Das andere Problem. Es muss updateComponentTreeUI() aufgerufen werden, damit das gewählte L’n’F wirksam wird. Das geschieht bei dir in der Fehlerbehandlung. Vermutlich ein Flüchtigkeitsfehler.

Jan

Schmeiß das Array UIname komplett raus und arbeite nur mit dem Array erscheinung. Da steckt alles an Infos drin, was zu brauchst.

Jan

1 Like

Hallöle…
So… erstmal wieder Danke :smile:
Hab auch gerade den Fehler gefunden…

catch (Exception x) {}
 // aktualisierte Anzeige für Titelleiste des Fensters
 // SwingUtilities für optische Umgestaltung des Fensters
 // updateComponentTreeUI bringt aktuellen Container des
 // Fensters und Komponenten auf aktuellen Stand
 SwingUtilities.updateComponentTreeUI(this.getContentPane());

Ja, die verdammte Klammer. Das Design ändert sich jetzt *juhu*
Werd dann mal den Rest anpassen…
Danke nochmal :smile:
Grüßl