2013-06-09 2 views
0

Bonjour J'écris une sorte de Menu pour un programme de cryptage que j'écris. J'ai fini le noyau de celui-ci, et maintenant je veux essayer de créer une interface graphique pour cela. Voici le code pour le premier menu:Fermer un JFrame après avoir cliqué sur un bouton Java

package matrix_with_GUI; 

import javax.swing.*; 
import java.awt.event.* ; 
import java.awt.* ; 

public class Main_Menu extends JFrame implements ActionListener{ 
    private JButton action1 = new JButton (""); 
    private JButton action2 = new JButton (""); 
    private JPanel pane = new JPanel(); 
    private JLabel lbl; 

public static void main(String[] args) { 
    Main_Menu main = new Main_Menu(); 
} 

public Main_Menu(){ 
    super(); 
    JPanel pane=new JPanel(); 
    setTitle ("Start Menu") ; 
    JFrame frame = new JFrame(""); 

    setVisible(true); 
    setSize (380, 260) ; 
    setLocation (450, 200) ; 
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) ; 

    action1 = new JButton("Start"); 
    action2 = new JButton("Exit"); 
    lbl = new JLabel ("Welcome to the Matrix Encoder/Decoder!!!"); 
    setLayout(new FlowLayout()); 

    add (lbl) ; 
    add(action1, BorderLayout.CENTER); 
    action1.addActionListener (this); 
    add(action2, BorderLayout.CENTER); 
    action2.addActionListener (this); 
} 
@Override 
public void actionPerformed(ActionEvent event) { 
    // TODO Auto-generated method stub 
    OptionsMenu x = new OptionsMenu(); 
    if (event.getSource() == action1) 
    { 
     System.exit(0); 
     x.OptionsMenu(); 
    } 
    else if(event.getSource() == action2){ 
     System.exit(0); 
    } 

} 

} Lorsque le bouton Démarrer est cliqué, le nouveau menu revient tout beau et bon, mais le premier menu reste ouvert. Y at-il un moyen de fermer ce premier menu ET ouvrir le second menu avec le premier bouton cliquez? Je suis très nouveau à l'interface graphique, donc la solution la plus simple serait très utile. Sur une note de côté est-il un moyen simple de déplacer le bouton Démarrer à la ligne suivante? Merci

+2

S'il vous plaît vérifier: [l'utilisation-de-multiples-JFrames-bon-mauvais -practice] (http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice) –

+1

'System.exit (0);' provoquera la fermeture de la JVM. – Maroun

+1

1) Ne pas étendre le cadre ou d'autres conteneurs de niveau supérieur. Au lieu de créer et utiliser une instance de un. 2) Ne pas définir la taille des conteneurs de niveau supérieur. Mettez plutôt le contenu en page et appelez 'pack()'. –

Répondre

2

Vous avez 2 options: vous pouvez utiliser un écouteur de fenêtre, ou vous pouvez utiliser la méthode dispose(). Pour ce faire, le Éliminez() il suffit de taper

* This is better to be used with subframes and 2nd level windows.* 

this.dispose(); 

ou vérifier ce lien pour l'utilisation de l'auditeur de la fenêtre

Closing JFrame

+0

merci l'homme, cela fonctionne comme un charme! –

+0

pas de problème! Toujours heureux d'aider :) J'ai reçu un cadeau d'en haut, alors j'aide tous les autres :) – user2277872

+0

@ utilisateur2398954 ne pas oublier d'accepter la réponse .... – pinkpanther

1

Pour fermer la MAIN_MENU, vous pouvez simplement appeler sa méthode dispose:

this.dispose(); 

au lieu d'appeler System.exit(0), qui mettra fin à la JVM tout à fait.

Questions connexes