Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [JAVA] Chiudere un frame all'apertura di un altro

    Ciao a tutti!
    Sto scrivendo il codice per due frames, uno apre l'altro, però vorrei che quando si apre il secondo (tramite il click del mouse su un JButton) il primo si chiuda. Ho già provato a chiedere consiglio ma non riesco a far si che ciò accada, devo aver sbagliato a capire qualche concetto...
    codice:
    import Frame3.*;
    
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.*;
    import java.awt.*;
    
    public class Accesso extends JFrame {
        private static final long serialVersionUID = 1L;
    	public Frame3 reale;   // Un riferimento alla finestra secondaria
    
    ...
    
    //JButton e suo ricevitore
    		impostaLimite(limite,0,2,2,1,0,50); // Pulsante
    		limite.fill = GridBagConstraints.NONE;
    		limite.anchor = GridBagConstraints.CENTER;
    
    		grigliaAvanzata.setConstraints(pulsante,limite);
    
    		Receiver1 receiver1 = new Receiver1();//(attenzione alla cronologia) creo l'ascoltatore
    		new Receiver1(this);
    			pulsante.addActionListener(receiver1);//lo associo al JButton
    			pannello.add(pulsante);//includo il JButton nel pannello
    
    				setContentPane(pannello); // rendo il pannello parte del frame
    				setVisible(true); // Visualizzo il tutto!
    	}
    
        class Receiver1 implements ActionListener {
    
    	    private Accesso a;
    		    public Receiver1(Accesso a) {
    		        this.a = a;
    		    }
    	public void actionPerformed(ActionEvent e) {
    
          reale = new Frame3();
          reale.setVisible( true );
    	a.setVisible(false);
    			}
    		}
    
    	public static void main(String argv[]) {
    
    		Accesso nf = new Accesso();
    	}
    }
    Qualcuno sa spiegarmi dove sbaglio?
    Vi ringrazio anticipatamente!
    Gato

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora puoi usare il cardlayout (usato per fare strutture tipo creazioni guidate) e/o aprire un altro frame, ma ricordare di chiamare un dispose() sul primo appena il secondo frame è completo

  3. #3
    Purtroppo il cardLayout non può fare al mio caso, in quanto il primo è semplicemente un frame di accesso..
    Il problema è che già chiamo il dispose():
    codice:
    //JButton e suo ricevitore
    		impostaLimite(limite,0,2,2,1,0,50); // Pulsante
    		limite.fill = GridBagConstraints.NONE;
    		limite.anchor = GridBagConstraints.CENTER;
    
    		grigliaAvanzata.setConstraints(pulsante,limite);
    
    		Receiver1 receiver1 = new Receiver1();//(attenzione alla cronologia) creo l'ascoltatore
    		new Receiver1(this);
    			pulsante.addActionListener(receiver1);//lo associo al JButton
    			pannello.add(pulsante);//includo il JButton nel pannello
    
    				setContentPane(pannello); // rendo il pannello parte del frame
    				setVisible(true); // Visualizzo il tutto!
    	}
    
        class Receiver1 implements ActionListener {
    
    	    private Accesso a;
    		    public Receiver1(Accesso a) {
    		        this.a = a;
    		    }
    	public void actionPerformed(ActionEvent e) {
    
          reale = new Frame3();
          reale.setVisible( true );//qui apro il secondo frame
    	a.dispose();//qui chiudo il frame di accesso
    			}
    		}
    Ma niente cambia: il frame di accesso rimane sullo schermo!
    Gato

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    uhmm posta tutto il codice

  5. #5
    Eccolo:
    codice:
    import Frame3.*;
    
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.*;
    import java.awt.*;
    
    public class Accesso extends JFrame {
        private static final long serialVersionUID = 1L;
    	public Frame3 reale;   // Un riferimento alla finestra secondaria
    
    	//Creo i componenti
    	JLabel Lab1 = new JLabel("Utente: ", SwingConstants.LEFT);//ipLabel
    	JLabel Lab2 = new JLabel("Password: ", SwingConstants.LEFT);//passwordLabel
    
    	JTextField utente = new JTextField();//Utente
    	JPasswordField password = new JPasswordField();//passwordText
    
    	JButton pulsante = new JButton("OK");
    
    // Definisco il metodo che servirà per definire i limiti di layout
    	void impostaLimite(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) {
    
    		gbc.gridx = gx;
    		gbc.gridy = gy;
    		gbc.gridwidth = gw;
    		gbc.gridheight = gh;
    		gbc.weightx = wx;
    		gbc.weighty = wy;
    	}
    
    	public Accesso() { // Il costruttore della classe
    
    	super("Accesso...");
    
    		setSize(300, 120);
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    	JPanel pannello = new JPanel();
    
    // imposta le proprietà dei componenti
    
    		utente.setEditable(true);
    		password.setEchoChar('*');
    
    //definisce il gestore di layout
    		GridBagLayout grigliaAvanzata = new GridBagLayout();
    		GridBagConstraints limite = new GridBagConstraints();
    		pannello.setLayout(grigliaAvanzata);
    
    //definisce i limiti di ogni componente e lo aggiunge al pannello
    		impostaLimite(limite,0,0,1,1,35,0); //etichetta lab1-utente
    		limite.fill = GridBagConstraints.NONE;
    		limite.anchor = GridBagConstraints.EAST;
    
    		grigliaAvanzata.setConstraints(Lab1,limite);
    		pannello.add(Lab1);
    
    
    		impostaLimite(limite,1,0,1,1,65,100); //campo-utente
    		limite.fill = GridBagConstraints.HORIZONTAL;
    
    		grigliaAvanzata.setConstraints(utente,limite);
    		pannello.add(utente);
    
    
    		impostaLimite(limite,0,1,1,1,0,0); //etichetta lab2-password
    		limite.fill = GridBagConstraints.NONE;
    		limite.anchor = GridBagConstraints.EAST;
    
    		grigliaAvanzata.setConstraints(Lab2,limite);
    		pannello.add(Lab2);
    
    
    		impostaLimite(limite,1,1,1,1,0,100); //campo-password
    		limite.fill = GridBagConstraints.HORIZONTAL;
    
    		grigliaAvanzata.setConstraints(password,limite);
    		pannello.add(password);
    
    //JButton e suo ricevitore
    		impostaLimite(limite,0,2,2,1,0,50); // Pulsante
    		limite.fill = GridBagConstraints.NONE;
    		limite.anchor = GridBagConstraints.CENTER;
    
    		grigliaAvanzata.setConstraints(pulsante,limite);
    
    		Receiver1 receiver1 = new Receiver1();//(attenzione alla cronologia) creo l'ascoltatore
    			new Receiver1(this);
    
    				pulsante.addActionListener(receiver1);//lo associo al JButton
    				pannello.add(pulsante);//includo il JButton nel pannello
    
    					setContentPane(pannello); // rendo il pannello parte del frame
    					setVisible(true); // Visualizzo il tutto!
    	}
    
        class Receiver1 implements ActionListener {
    
    	    private Accesso a;
    		    public Receiver1(Accesso a) {
    		        this.a = a;
    		    }
    	public void actionPerformed(ActionEvent e) {
    
          reale = new Frame3();
          reale.setVisible( true );//qui apro Frame3
    	a.dispose();//qui chiudo il frame di accesso
    			}
    		}
    
    	public static void main(String argv[]) {
    
    		Accesso nf = new Accesso();
    	}
    }
    oltretutto ora in compilazione mi da un errore che non capisco:
    codice:
    Accesso.java:88: error: The constructor Accesso.Receiver1() is undefined
    	Receiver1 receiver1 = new Receiver1();//(attenzione alla cronologia) creo l'ascoltatore
    Gato

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    l'errore è molto chiaro

    Accesso.java:88: error: The constructor Accesso.Receiver1() is undefined
    Receiver1 receiver1 = new Receiver1();//(attenzione alla cronologia) creo l'ascoltatore

    non esiste il costruttore Receiver1() senza parametri
    allora se non definisci nemmeno un costruttore, il compilatore ne crea uno di default (che non fa niente) per mantenere consistenza nella creazione degli oggetti.
    Una volte che definisci tu un costruttore (e ne definisci uno con parametro Accesso) devi o usare quel costruttore o definire quello senza parametri
    intanto correggi questo errore, fai un clean and build ed esegui

  7. #7
    Allora, vediamo se ho capito:
    Una volte che definisci tu un costruttore (e ne definisci uno con parametro Accesso)
    il costruttore lo definisco qui, giusto?
    codice:
    	    private Accesso a;
    		    public Receiver1(Accesso a) {//Qui definisco il costruttore
    		        this.a = a;
    		    }
    devi o usare quel costruttore o definire quello senza parametri
    quello che non capisco è come devo usarlo?
    Ti chiedo scusa se faccio fatica a capire, sono abbastanza nuovo di java e sto facendo pratica...
    Gato

  8. #8
    Originariamente inviato da fpertegato
    ...
    il costruttore lo definisco qui, giusto?
    codice:
    	    private Accesso a;
    		    public Receiver1(Accesso a) {//Qui definisco il costruttore
    		        this.a = a;
    		    }
    quello che non capisco è come devo usarlo?
    ...
    Però se il livello è questo qui ti consiglio di leggerti un buon manuale prima ancora di tentare di scrivere del codice. Stiamo parlando smplicemente di costruttori, se non sai cosa sono e come utilizzarli ti mancano proprio le basi.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Originariamente inviato da fpertegato
    Eccolo:
    codice:
    ...
    		Receiver1 receiver1 = new Receiver1();//(attenzione alla cronologia) creo l'ascoltatore
    			new Receiver1(this);
    Ma cos'è questo??? Rabbrividisco!!!

    codice:
    Receiver1 receiver1 = new Receiver1(this);
    forse così è un po' meglio. O perlmeno ha un senso.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    Si, se non ho capito male li ho definito due costruttori al posto di uno solo...
    Sai consigliarmi un buon corso a parte questo?
    Gato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.