¿Cómo puedo cerrar un JFrame desde un método?

Iniciado por |Miguel|, 8 Marzo 2012, 19:46 PM

0 Miembros y 1 Visitante están viendo este tema.

|Miguel|

Buenas a todos.

Pues eso, que no sé cómo cerrar un JFrame desde un método....

La historia es que tengo un JFrame con unos cuantos botones. Al pulsarlos, llamo a una función estática y necesito que ese método me cierre el JFrame, con un dispose().

this.dispose() no ha funcionado, y pasar como parámetro al método el JFrame haciendo esto en la llamada tp:
Código (java) [Seleccionar]
metodo((JFrame)getParent()); //esto me da excepción de nullpointer al hacer dispose

Gracias!

visualfree

Te hice un pequeño ejemplo espero te sirva...

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Ejemplo{
        public static void main(String[] args)
        {
                Ventana v=new Ventana();
                v.setVisible(true);
        }
}
class Ventana extends JFrame{
        public Ventana()
        {
                this.setTitle("Ventana");
                this.setSize(200,200);
                NuevoPanel p=new NuevoPanel();
                add(p);
        }
}
class NuevoPanel extends JPanel{
        JButton btnCerrar=new JButton("Cerrar Programa");
        public NuevoPanel()
        {
                this.setLayout(new BorderLayout());
                this.add(btnCerrar);
                OyenteCerrar cerrar=new OyenteCerrar();
                btnCerrar.addActionListener(cerrar);
        }
        class OyenteCerrar implements ActionListener{
                public void actionPerformed(ActionEvent e)
                {
                        System.exit(0);
                }
        }
}

|Miguel|

Cita de: visualfree en 17 Marzo 2012, 07:39 AM


                        System.exit(0);

¿Eso no cierra toda la aplicación, y no solo ese JFrame?
De todas formas, lo acabé resolviendo cambiando el método donde llamo a dispose() a no estático y funcionó todo sin problema. Disculpas por olvidarme de ponerlo aquí.

Gracias por el interés visualfree

aloncito3x

Hola Miguel puedes mostrarme el ejemplo completo. también deseo cerrar un jframe desde un método. gracias espero me puedas responder


|Miguel|

Esta misma función cuando la declaro como estática no me funcionaba el dispose... no sé si sera lo que necesitas aloncito3x, échale un vistacillo... esto es un método para un ahorcado que hice.
Saludos.
Código (java) [Seleccionar]
void comprobarLetra(char letra){
        JButton boton = compruebaBoton(letra);
        if(boton.isEnabled()){
            //System.out.println(palabra);
            if(palabra.indexOf(letra) != -1){
                labelLetrasAcertadas.setText("");
                labelInfo.setForeground(Color.green);
                labelInfo.setText("¡Has acertado una letra! "+letra);
                boton.setBackground(Color.green);
                for(int i=0; i<palabra.length(); i++){
                    if(palabra.substring(i, i+1).equals(String.valueOf(letra))){
                        aciertos++;
                        bien[i]=String.valueOf(letra).toUpperCase()+" ";
                    }
                }
                for(int i=0; i<bien.length; i++){
                    labelLetrasAcertadas.setText(labelLetrasAcertadas.getText()+bien[i]);
                }
            }
            else{
                erroresRestantes--;
                labelInfo.setForeground(Color.red);
                labelInfo.setText("Esa letra no está en la palabra... "+letra);
                ImageIcon icono = new ImageIcon("src/img/"+String.valueOf(6-erroresRestantes) +".png");
                labelDibujo.setIcon(icono);
                labelDibujo.setText(String.valueOf(erroresRestantes) +" fallos restantes.");
                boton.setBackground(Color.red);
            }
       
            if(erroresRestantes <= 0){
                JOptionPane.showConfirmDialog(null, "¡Has agotado los fallos!\nOtra vez será.\nLa palabra era '"+palabra+"'.", "Fin de la partida", JOptionPane.PLAIN_MESSAGE);
                Ahorcado.princi.setVisible(true);
                //ventanaPrincipal.game.
                dispose();
               
            }
            else if(aciertos==palabra.length()){
                JOptionPane.showConfirmDialog(null, "¡Has acertado la palabra!\nEnhorabuena", "Fin de la partida", JOptionPane.PLAIN_MESSAGE);
                Ahorcado.princi.setVisible(true);
                //ventanaPrincipal.game.
                dispose();
            }
        boton.setEnabled(false);
        }
    }