2016-12-21 4 views
-1

Je sais que cela a été demandé des milliers de fois, mais je n'ai jamais trouvé de réponse qui fonctionne pour moi. J'utilise Java IDE pour Java Developers (Eclipse Kepler).Fermeture d'un JFrame via JButton lors de l'ouverture d'un nouveau JFrame

J'ai besoin d'un JButton qui, en cliquant dessus, ferme le JFrame sur lequel se trouve le bouton et en ouvre un nouveau qui existe dans une classe différente. J'ai ceci:

 JButton button = new JButton("Click Me!"); 
 
     add(button); 
 
     
 

 
     button.addActionListener(new ActionListener() 
 
     { 
 
      public void actionPerformed(ActionEvent e) { 
 

 
      } 
 
     }); 
 
     
 
    }

Je ne sais pas quoi mettre après la actionPerformed. Et frame.dispose(); ça ne marche pas pour moi.

Je demande, comment puis-je fermer le JFrame avec un JButton, et en cliquant sur le même bouton, il ouvre aussi le JFrame d'une nouvelle classe?

+1

'frame.setVisible (false);' devrait fonctionner, si la variable 'frame' indique en fait à la fenêtre appropriée. Pour ouvrir une nouvelle JFrame, appelez 'setVisible (true)' dessus. – markspace

+0

Vous devez d'abord créer le nouveau JFrame, puis disposer le cadre actuel. –

+0

Cela rend seulement le contenu des cadres invisibles. – Fletch614

Répondre

0

Voici un exemple qui peut aider:

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class MyFrame extends JFrame { 

    public MyFrame() { 

     setLayout(new BorderLayout()); 
     getContentPane().setPreferredSize(new Dimension(400, 250)); 

     JButton btn = new JButton("Click Me"); 
     btn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       setVisible(false); 

       JFrame frame2 = new JFrame(); 
       frame2.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       frame2.setLocation(300, 150); 
       frame2.add(new JLabel("This is frame2.")); 
       frame2.setVisible(true); 
       frame2.setSize(200, 200); 

      } 
     }); 
     add(btn,BorderLayout.SOUTH); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MyFrame frame = new MyFrame(); 
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setLocation(150, 150); 
       frame.add(new JLabel("This is frame1."), BorderLayout.NORTH); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+1

OUI! Cela fonctionne parfaitement! Merci beaucoup! Tu es un sauveur – Fletch614