Frage

Ich habe einen kleinen Rahmen, wo ich Benutzer & Passwort fragen. Dieser Rahmen wird Klicken auf eine Schaltfläche in einem Hauptfenster geöffnet werden.

Dann habe ich zwei Schaltflächen: OK und Abbrechen

.

Wenn ich auf „Abbrechen“ klicken, muss ich diesen Rahmen schließen, ohne die Anwendung zu verlassen.

Wie kann ich das tun?

War es hilfreich?

Lösung

Sie können mit entweder Frame.hide () oder Frame.dispose (). Ich würde auch zu sehen in JDialog oder JOptionPane empfehlen

Korrektur: hide () ist veraltet. SetVisible (false) sollte stattdessen verwendet werden

Andere Tipps

Vielleicht ein sauberer Weg ist nur die setDefaultCloseOperation von EXIT_ON_CLOSE ändern DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Sie können setVisible (false) auf dem Rahmen nennen.

Sie mögen vielleicht auch setDefaultCloseOperation auf dem Rahmen hier in HIDE_ON_CLOSE (info vorbei nennen: http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29 ) . Das wird die App von weggeht verhindern, wenn sie Benutzer auf das „X“ auf der JFrame trifft es zu schließen.

Verwenden this.dispose(); im Aktions Listener-Methode, wenn der Benutzername / Passwort erfolgreich ist. zB:

public void actionPerformed(ActionEvent ae) {

    if(ae.getSource()=="button you press to confirm username/password"){
        if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){
            new "window to be opened upon success"
            this.dispose(); // calls dispose on this object ie. 
                                            // the login window 
        }
        else{
            userNameTf.setText("");
            passwordTf.setText("");

            JOptionPane.showMessageDialog(this,
                    "Username and/or password is incorrect!",
                    "Attention!",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

}

Wenn Sie innere Klassen verwenden, die Ereignisse zu verarbeiten nur ersetzen 'this.Dispose ()' mit Super_Class_Name.this.dispose ();

Stellen Sie sicher, dass Sie dies nicht tun:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible Methode entbindet Speicherressourcen und sollten nur verwendet werden, wenn das Formular wieder verwendet werden soll.

Die dispose Methode Gibt alle der nativen Bildschirm Ressourcen durch dieses Fenster verwendet, deren Subkomponenten, und alle von den unternehmenseigenen Kindern. Das heißt, werden die Ressourcen für diese Komponenten zerstört werden, jeder Speicher verbrauchen sie wird an das Betriebssystem zurückgegeben werden, und sie werden als nichtanzeigbaren markiert werden.

Erstellen Sie eine Funktion in äußeren Klasse, wo Sie die JFrame implementieren (Sie müssen Taste zum Schließen Abbrechen auf drücken).
Schreiben this.setVisible(false); bei der Implementierung dieser Funktion.
Schließlich Aufruf dieser Funktion in der ActionListener Implementierung, wenn Sie es schließen möchten.

Sie können es in vielerlei Hinsicht tun, aber diese beiden Wege sind die meisten verwendbar ein
1. Schreib this.setVisible(false) in innen umgesetzt ActionListener
oder in 2. Schreib this.dispose() innerhalb implementiert ActionListener . Hoffe, das wird Ihnen helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top