es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

dispose() no funciona en GUI ya que la antigua JFrame sigue mostrándose junto con la nueva Frame.

Este es el código. Estoy tratando de pasar de cerrar un JFrame a abrir otro (nuevo) JFrame en interfaces de usuario al hacer clic en un botón. Pero cuando cierro el JFrame antiguo, el nuevo también desaparece.

public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub

    try {
        if(e.getSource()==btn) {
            dispose();
            customer s =new customer();
            s.setVisible(true);
            s.pack();
            s.setLocationRelativeTo(null);
            s.setExtendedState(JFrame.MAXIMIZED_BOTH);
            CloseFrame();
        }

        if(e.getSource()==btn1) {
            dispose();
            pet p =new pet();
            p.setVisible(true);
            p.pack();
            p.setLocationRelativeTo(null);
            p.setExtendedState(JFrame.MAXIMIZED_BOTH);
        }

        if(e.getSource()==btn2) {
            dispose();
            Transaction t =new Transaction();
            t.setVisible(true);
            t.pack();
            t.setLocationRelativeTo(null);
            t.setExtendedState(JFrame.MAXIMIZED_BOTH);
            CloseFrame();
        }   
    }
    catch(Exception e1) {
    }        
}   
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con este código es que cuando se cierra el antiguo JFrame, el nuevo JFrame también desaparece. Esto podría estar ocurriendo porque el método CloseFrame() se está llamando después de que el nuevo JFrame es creado y mostrado.

    Para solucionar este problema, el método CloseFrame() debería ser llamado antes de eliminar el antiguo JFrame. Esto asegurará que el antiguo JFrame se cierre correctamente antes de que el nuevo JFrame sea mostrado.

    Aquí está el código actualizado:

    public void actionPerformed(ActionEvent e) {
        try {
            if (e.getSource() == btn) {
                customer s = new customer();
                s.setVisible(true);
                s.pack();
                s.setLocationRelativeTo(null);
                dispose();
                CloseFrame();
            }
    
            if (e.getSource() == btn1) {
                pet p = new pet();
                p.setVisible(true);
                p.pack();
                p.setLocationRelativeTo(null);
                dispose();
            }
    
            if (e.getSource() == btn2) {
                Transaction t = new Transaction();
                t.setVisible(true);
                t.pack();
                t.setLocationRelativeTo(null);
                dispose();
                CloseFrame();
            }
        } catch (Exception e1) {
        }
    } 
    

    Al llamar a CloseFrame() antes de eliminar el antiguo JFrame, puedes asegurarte de que el nuevo JFrame permanezca visible incluso después de que el antiguo JFrame se cierre.

Comments are closed.