web-dev-qa-db-fra.com

Fermer jFrame après avoir cliqué sur JButton

J'ai conçu deux JFrames dans NetBeans.

Lorsque je clique sur le bouton "règles" (c'est-à-dire placé sur JFrame1), un deuxième JFrame s'ouvre (mais JFrame2 s'ouvre par-dessus la fenêtre de JFrame1, c'est ce que je ne veux pas) . Dans le second JFrame, il y a un bouton "fermer". Mais lorsque je clique sur ce bouton, je veux que JFrame1 soit ouvert et qu'il fonctionne aussi, mais JFrame2 n'est pas fermé et JFrame1 apparaît par-dessus JFrame2.

En bref, le formulaire principal est JFrame1. Lorsque je clique sur le bouton "règles" de JFrame1, il ouvre JFrame2 sur JFrame1. Dans JFrame2, il existe un bouton "fermer" lorsqu'il est cliqué, le formulaire principal (i.e JFrame1) est lancé, mais il est lancé via JFrame2.

Le scénario est JFframe1 -> JFrame2 -> JFrame1 

Maintenant, ma question est après avoir cliqué sur le bouton "règles", JFrame1 doit être fermé et JFrame2 affiché à l'écran et vice versa.

5
Ankush Pruthi

En supposant que votre bouton ait un actionListener, après avoir cliqué sur le "bouton des règles" inséré:

      JFrame1.dispose();  //Remove JFrame 1
      JFrame2.setVisible(true) //Show other frame

Et puis reverese pour la réaction opposée

8
Levenal

Une telle chose devrait être sur le constructeur ou la méthode qui crée JFrame2:

btnCancel.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        //call another method in the same class which will close this Jframe
        CloseFrame();
    }
});

C'est la méthode qui devrait fermer JFrame2

public void CloseFrame(){
    super.dispose();
}
3
Aleksey Dz

Je ne suis en aucun cas un expert, mais j'ai aussi rencontré ce problème. Si vous définissez votre deuxième JFrame sur masqué, lorsque vous cliquez sur "Annuler", le deuxième JFrame se ferme.

//this is the code for the "cancel" button action listener 
public void actionPerformed(ActionEvent e) {
    setVisible(false);//hides the second JFrame and returns to the primary
0
Delta3

Si cela ne fonctionne pas, essayez ceci

JFrame1.dispose();  //Remove JFrame 1
      JFrame2.setVisible(true) //Show other frame
JFrame2.setVisible(true);
this.dispose();
0
Guermou Di Omar
  1. Avoir un MainClass avec une méthode main ().
  2. Demandez à la classe MainClass qui a la méthode main () d’encapsuler vos variables de référence JFrame1 et JFrame2. JFrame1 ou JFrame2 ne doivent pas contenir main () à moins que vous n'ayez une raison spécifique. 
  3. Après avoir cliqué sur quelque chose dans l'un des objets JFrame, instanciez/rendez visible l'autre objet JFrame et supprimez-le via vos méthodes d'objet MainProgram.JFrame.

Exemple:

    //btn event inside 1st JFrame/window
    private void jButton1ActionPerformed(Java.awt.event.ActionEvent evt) {                                         
         MainProgram.openResultsForm();  //MainProgram opens 2nd window
         MainProgram.queryEntryForm.dispose();   //MainProgam closes this,
                                                 //the 1st window
    }
0
user3053416

cela a fonctionné pour moi (Frame1 appelé RegScreen et Frame2 appelé MainScreen):

RegScreen.this.setVisible(false);

new MainScreen().setVisible(true);

Espérons que cela aide :) Regscreen était le cadre d'origine ouvert au démarrage.

0
Gunshield_XD