Swing Frame schließen

S

Stiff08

Gast
Hallo Leute!

Ich bin gerade dabei eine GUI zu schreiben. Dazu verwenden wir hier in der Schule Bluej.

Das ganze soll später ein Autoersatzteil verkauf werden mit dem ich dann für verschiedene Modelle verschiedener Hersteller Ersatzteile kaufe und diese in einer Array gespeichert werden. (Zur späteren Auslese aller gekauften Teile). Aber das sei mal dahin gestellt.

Ich habe jetzt 2 Klassen. Die erste zur Erzeugung des Frame "Herstellerauswahl" und die 2 Klasse "Modellauswahl". Die Klasse Herstellerauswahl ist vererbt von Modellauswahl.
In meiner ersten Klasse wir ein Frame erstellt in dem es 3 Buttons gibt über die ich eben die Hersteller auswählen kann. Dazu verwende ich die ActionListener. Ich betätige also den Button Audi und es wird eine Methode aufgerufen (ModelAuswahlAudi();) die in der Superklasse(Modellauswahl) definiert ist und das nächste Frame (zur Auswahl der Modelle) erzeugt. Dabei soll nun das erste Frame (die Herstellerauswahl) wieder geschlossen werden.
Dachte ich könnte einfach frame.setVisible(false); in den ActionListener schreiben. Aber das funktioniert nicht.

Hier mal einen Auszug aus dem Quelltext.

Java:
       buttonAudi.addActionListener(new ActionListener()
        {
               public void actionPerformed(ActionEvent e)
        {
            JOptionPane.showMessageDialog (null,"Wählen Sie nun das gewünschte Model aus.");
            ModelAuswahlAudi();
            frame.setVisible(false);
            
        }
        });
Der ActionListener hier ist ja nun eine innere Klasse und ich weiss das man auf die Variablen nur zugreifen kann wenn sie als final deklariert werden. Das ändert jedoch auch nichts. Habe die Variable frame als Datenfeld mit protected gesetzt.

Könnt Ihr helfen? Bin am verzweifeln irgendwie muss es doch funktionieren.

Vielen Dank im Voraus!!

Stiff
 
Zuletzt bearbeitet von einem Moderator:

faetzminator

Gesperrter Benutzer
Wieso deklarierst du sie nicht als [c]final[/c] immerhin sollte das Fenster wiederverwendet werden und muss nicht jedes Mal neu erstellt werden.
 
S

Stiff08

Gast
Hey,

Ich habe das Datenfeld frame schon als final deklariert aber das hat nichts genützt. Bekomme dann immer Fehler beim übersetzen.
 
S

Stiff08

Gast
Es funktioniert!

hier mal mein Konstruktor und Datenfeld

final JFrame frame;

Java:
 /**
     * Konstruktor der Klasse Hersteller
     */
    public HerstellerGUI()
    {
   JFrame frame = new JFrame();
              frame.setTitle("Hersteller");
              frame.setSize(900,400);
              frame.setLocation(435,225);
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setVisible(true);

Der Fehler war einfach nur der Typ JFrame vor der variable frame in der Zuweisung
JFrame frame = new JFrame() ;

Variable frame war ja dann ständig eine lokale Variable. Einfach den Typ JFrame gelöscht und schon funktioniert es! *freu*

Danke für die schnellen Antworten!
 

Neue Themen


Oben