2010-03-01 16 views
1

J'essaie de disposer de mon JFrame en cliquant sur un bouton, situé sur un JPanel qui est placé sur le JFrame que je veux fermer.Éliminer JFrame en cliquant à partir d'un JPanel interne

J'ai essayé de faire une méthode statique sur la classe JFrame, mais bien sûr mon IDE m'a dit que cela n'arriverait pas.

Quiconque pense à une solution?

Merci!

Répondre

0

Essayez ceci:

public class DisposeJFrame extends JFrame{ 
    JPanel panel = new JPanel(); 
    JButton button = new JButton("Dispose JFrame"); 

    public DisposeJFrame(){ 
     super(); 
     setTitle("Hi"); 
     panel.add(button); 
     add(panel); 
     pack(); 

     button.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       dispose(); 
      } 
     }); 
    } 

    public static void main(String args[]){ 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run(){ 
       DisposeJFrame jf = new DisposeJFrame(); 
        jf.setVisible(true); 
      } 
     }); 
    } 
} 
0

quelque chose comme ça:

JButton closeFrameButton = new JButton("Close"); 
closeFrameButton.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     ((Window) getRootPane().getParent()).dispose(); 
    } 
}); 
+1

réponses avec le code de travail sont gentils, quand ils ont des explications pourquoi cela fonctionne, ils sont encore mieux. (Bienvenue dans Stack Overflowtoo btw) – indivisible

+0

Appeler [getTopLevelAncestor] (https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#getTopLevelAncestor--) est plus sûr que de supposer que JRootPane est un enfant direct de la fenêtre. En fait, si le composant est dans un JInternalFrame, ce code ne fonctionnera pas du tout. – VGR