Ver Mensaje Individual
  #12 (permalink)  
Antiguo 12/08/2013, 01:33
enderzote
 
Fecha de Ingreso: agosto-2013
Ubicación: Barcelona
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Error sin localizar en programa

Por si a alguien que estuviera en mi misma situación le interesara, expongo el código a partir del cual conseguí hacer funcionar mi programa como quería: desde el main escojo la ventana a la que ir mediante botones, cerrando y abriendo respectivamente, y pudiendo volver a la ventana inicial desde otro botón en la secundaria.

Hasta yo lo entiendo (es broma, Xerelo)

El main:

Código:
import javax.swing.*; 
import java.awt.event.*;

public class Login extends JFrame implements ActionListener {
	
	private JPanel panelLogin;
	
    Login(){
        panelLogin = new JPanel();
        panelLogin.setLayout(null);
    	setBounds(50,50,400,400);
        setTitle("Ventana de Login");
        setContentPane(panelLogin);
        JButton btnLogin1 = new JButton("Ventana 1");
	        btnLogin1.setBounds(150,100,100,50);
	        btnLogin1.setActionCommand("ventana1");
	        btnLogin1.addActionListener(this);
	        panelLogin.add(btnLogin1);
        JButton btnLogin2 = new JButton("Ventana 2");
	        btnLogin2.setBounds(150,250,100,50);
	        btnLogin2.setActionCommand("ventana2");
	        btnLogin2.addActionListener(this);
	        panelLogin.add(btnLogin2);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    
    public static void main(String[] args) {
        new Login(); 
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("ventana1")) {
        	new Ventana1(this);
        }
        else if (e.getActionCommand().equals("ventana2")) {
        	new Ventana2(this);
        }
    }
}
La clase Ventana1, idéntica a Ventana2 con las salvedades evidentes, es decir, sustituir los "1" por "2" y listo:

Código:
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;

class Ventana1 extends JFrame implements ActionListener {    
    JFrame ventanaLogin;
    private JPanel panel1;
    
    Ventana1(JFrame ventanaLogin) {
        this.ventanaLogin = ventanaLogin;
        ventanaLogin.setVisible(false);
        
        panel1 = new JPanel();
        setTitle("Ventana 1");
        panel1.setLayout(null);
    	setBounds(200,200,400,400);
    	setContentPane(panel1);
        JButton btnP1 = new JButton("Salir 1");
            btnP1.addActionListener(this);
            panel1.add(btnP1);
            btnP1.setBounds(150,200,100,50);
        this.setVisible(true);
        // Con la linea sig. saldría de la aplicación
        // Sin la linea sig. vuelve a Login si clic en X, igual que botón "salir"
        // this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.addWindowListener(new Ventana1.ManejadorDeVentana1()); 
    }

    private void activarVentanaLogin() {
        this.setVisible(false);
        ventanaLogin.setVisible(true); 
    }

    public void actionPerformed(ActionEvent e) {
        activarVentanaLogin(); 
    }

    class ManejadorDeVentana1 extends WindowAdapter{
        public void windowClosing(WindowEvent e) {
            activarVentanaLogin(); 
        } 
    }
}