JFrame nur ein mal öffnen, auch beim mehrmaligem Betätigen

GunGrave01

Mitglied
Hallo zusammen und ein Frohes Neues :meld:

Mein Problem is, hab ein Fenster A welches ich aus einen andren Fenster B aufrufen tu. Nur möchte ich jetzt dass so handhaben, dass falls der Aufruf des Fensters A stattfindet und das Fenster A schon geöffnet ist, soll nichts geschehen, im moment bekomme ich aber immer meherere Kopien des Fensters A bei mehrmaligem Aufruf (Betätigen des AdvancedConfigurationItem Buttons).


Hier die Aufruffunktion,
Java:
private void AdvancedConfigurationItemActionPerformed(java.awt.event.ActionEvent evt) {                                                          
// TODO add your handling code here:
    
         //       if(AdvConfigurationFrame==null)
        //        {
                    AdvancedConfigurationFrame advConfgFrObject = new AdvancedConfigurationFrame();
        
                    clearDcChannels( "ABC" );
                    advConfgFrObject.AdvConfigurationFrame.setVisible( true );
                    advConfgFrObject.AdvConfigurationFrame.requestFocusInWindow();
          /*      }
                else
                {
                    //do nothing, because the frame is already opened
                }*/
                
}

nun möchte ich hier irgendwie überprüfen ob das Fenster schon offen is.

AdvancedConfigurationFrame is die Klasse wo sich das Frame befindet.
AdvConfigurationFrame is der Name des Frames.

Danke

Gruß
 
Also ich habe das mal wie folgt gelöst:

Java:
try{
   frame.toFront();
   frame.requestFocusInWindow();
}catch(Exception e){
   // neues Frame erzeugen
}

Gibt bestimmt bessere Lösungen, aber bei mir funkionierts
 
Entwerfe deine Klasse nach dem Singleton-Entwurfsmuster.
Das Singleton-Entwurfsmuster ist jedoch nicht unumstritten.
Anstatt einfach irgendwo eine membervariable einzubauen rätst du ihm zu einen der schlechtesten Design Patterns dies gibt? :autsch:

@TO merk dir in einer Membervariable die Referenz zu dem Fenster-Object anstatt jedesmal ein neues zu erstellen.
 
Anstatt einfach irgendwo eine membervariable einzubauen rätst du ihm zu einen der schlechtesten Design Patterns dies gibt? :autsch:

@TO merk dir in einer Membervariable die Referenz zu dem Fenster-Object anstatt jedesmal ein neues zu erstellen.

Hat er doch geschrieben, dass es nicht unumstritten ist. Ist für viele Anwendungsfälle aber geeignet. Du weist es ja aber offensichtlich besser als die GOF. Respekt!
 
ich wuerde hier weder Singleton noch ueber einen externe Mechanismus gehen, bei zweitem geht es ja darum zu verhindern, dass ein weiterer Start des Programms stattfindet, nicht einfach dass eine neue Instanz erzeugt wird.

@TO merk dir in einer Membervariable die Referenz zu dem Fenster-Object anstatt jedesmal ein neues zu erstellen.
Schandro hat hier recht, das ist das einfachste und sinnigste
 
Hat er doch geschrieben, dass es nicht unumstritten ist. Ist für viele Anwendungsfälle aber geeignet. Du weist es ja aber offensichtlich besser als die GOF. Respekt!

So ganz sicher ist die GOF (bzw. Gamma) sich auch nicht:

Erich Gamma hat gesagt.:
When discussing which patterns to drop, we found that we still love them all. (Not really—I'm in favor of dropping Singleton. Its use is almost always a design smell.)

Quelle: Design Patterns 15 Years Later: An Interview with Erich Gamma, Richard Helm, and Ralph Johnson
 
Hehe, erstmal danke.

Habe einfach ne boolean Variable in den Constructor eingebaut, welche ich immer vor dem Aufruf des Frames überprüfe.

Gruß
Dennis
 

Zurück
Oben