Foro de elhacker.net

Programación => Java => Mensaje iniciado por: |Miguel| en 8 Marzo 2012, 19:46 pm



Título: ¿Cómo puedo cerrar un JFrame desde un método?
Publicado por: |Miguel| en 8 Marzo 2012, 19:46 pm
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
  1. metodo((JFrame)getParent()); //esto me da excepción de nullpointer al hacer dispose

Gracias!


Título: Re: ¿Cómo puedo cerrar un JFrame desde un método?
Publicado por: visualfree en 17 Marzo 2012, 07:39 am
Te hice un pequeño ejemplo espero te sirva...

Código:
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);
                }
        }
}


Título: Re: ¿Cómo puedo cerrar un JFrame desde un método?
Publicado por: |Miguel| en 17 Marzo 2012, 13:31 pm

Código:
                        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


Título: Re: ¿Cómo puedo cerrar un JFrame desde un método?
Publicado por: aloncito3x en 3 Mayo 2012, 08:01 am
Hola Miguel puedes mostrarme el ejemplo completo. también deseo cerrar un jframe desde un método. gracias espero me puedas responder


Título: Re: ¿Cómo puedo cerrar un JFrame desde un método?
Publicado por: raul_samp en 3 Mayo 2012, 14:18 pm
Método Dispose heredado por JFrame de Window (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Window.html#dispose())


Título: Re: ¿Cómo puedo cerrar un JFrame desde un método?
Publicado por: |Miguel| en 3 Mayo 2012, 17:06 pm
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
  1. void comprobarLetra(char letra){
  2.        JButton boton = compruebaBoton(letra);
  3.        if(boton.isEnabled()){
  4.            //System.out.println(palabra);
  5.            if(palabra.indexOf(letra) != -1){
  6.                labelLetrasAcertadas.setText("");
  7.                labelInfo.setForeground(Color.green);
  8.                labelInfo.setText("¡Has acertado una letra! "+letra);
  9.                boton.setBackground(Color.green);
  10.                for(int i=0; i<palabra.length(); i++){
  11.                    if(palabra.substring(i, i+1).equals(String.valueOf(letra))){
  12.                        aciertos++;
  13.                        bien[i]=String.valueOf(letra).toUpperCase()+" ";
  14.                    }
  15.                }
  16.                for(int i=0; i<bien.length; i++){
  17.                    labelLetrasAcertadas.setText(labelLetrasAcertadas.getText()+bien[i]);
  18.                }
  19.            }
  20.            else{
  21.                erroresRestantes--;
  22.                labelInfo.setForeground(Color.red);
  23.                labelInfo.setText("Esa letra no está en la palabra... "+letra);
  24.                ImageIcon icono = new ImageIcon("src/img/"+String.valueOf(6-erroresRestantes) +".png");
  25.                labelDibujo.setIcon(icono);
  26.                labelDibujo.setText(String.valueOf(erroresRestantes) +" fallos restantes.");
  27.                boton.setBackground(Color.red);
  28.            }
  29.  
  30.            if(erroresRestantes <= 0){
  31.                JOptionPane.showConfirmDialog(null, "¡Has agotado los fallos!\nOtra vez será.\nLa palabra era '"+palabra+"'.", "Fin de la partida", JOptionPane.PLAIN_MESSAGE);
  32.                Ahorcado.princi.setVisible(true);
  33.                //ventanaPrincipal.game.
  34.                dispose();
  35.  
  36.            }
  37.            else if(aciertos==palabra.length()){
  38.                JOptionPane.showConfirmDialog(null, "¡Has acertado la palabra!\nEnhorabuena", "Fin de la partida", JOptionPane.PLAIN_MESSAGE);
  39.                Ahorcado.princi.setVisible(true);
  40.                //ventanaPrincipal.game.
  41.                dispose();
  42.            }
  43.        boton.setEnabled(false);
  44.        }
  45.    }