Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110

    JFrame - Perché mi escono due finestre?

    Come da titolo... sto sperimentando invece del solito

    Container pannello = get.ContentPane();

    l'utilizzo di JFrame per creare una nuova frame che contenga il pannello (l'esempio l'ho fatto sfruttando qualche esercizio trovato su internet). Il risultato imprevisto però è la creazione di due finestre: una con quello che sto impostando io e l'altra vuota.
    Come mai? Grazie

    codice:
    package interfacceutentegrafiche;
    
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    
    public class LoginBase extends JFrame {
    
    
    	private static final int LARGHEZZA = 500;
    	private static final int ALTEZZA = 500;
    	
    	public LoginBase(){
    		super();
    		
    		JFrame frame = new JFrame("Login");
    		frame.setSize(LARGHEZZA,ALTEZZA);
    		
    		JPanel pannello = new JPanel();
    	
    		placeComponents(pannello);
    	
    		frame.add(pannello);
    		frame.setVisible(true);
    		
    	}
    	
    	private static void placeComponents(JPanel panel){
    		panel.setLayout(null);
    		
    		JLabel userLabel = new JLabel("User: ");
    		userLabel.setBounds(10,10,80,25);
    		panel.add(userLabel);
    		
    		JTextField userText = new JTextField(20);
    		userText.setBounds(50,10,160,25);
    		panel.add(userText);
    		
    		JLabel pwdLabel = new JLabel("Password: ");
    		pwdLabel.setBounds(10,50,80,25);
    		panel.add(pwdLabel);
    		
    		JTextField pwdText = new JTextField(20);
    		pwdText.setBounds(80,50,160,25);
    		panel.add(pwdText);
    		
    	}
    	
    	
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    
    		LoginBase login = new LoginBase();
    		login.setVisible(true);
    	}
    
    
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Il risultato imprevisto però è la creazione di due finestre: una con quello che sto impostando io e l'altra vuota.
    Il primo frame è quello dato da new LoginBase() che è un JFrame. Il secondo è un "puro" JFrame (non esteso) che crei nel costruttore con new JFrame("Login")

    Se non è quello che volevi ... devi decidere cosa fare ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Mmh... capito. Suppongo quindi che utilizzando "new LoginBase()" dovrei continuare nell'esatto modo sviluppato negli esercizi precedenti (che hai avuto modo di vedere), con container etc etc.

    Maaa... ci sono differenze sostanziali tra i due modi? E se uso il JFrame "puro" poi come richiamo la finestra dal main?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Maaa... ci sono differenze sostanziali tra i due modi? E se uso il JFrame "puro" poi come richiamo la finestra dal main?
    Due possibili varianti:

    codice:
    public Login extends JFrame {
        private JTextField userText;
        // ....
    
        public Login() {
            super("Login");
            // ... setup ...
            setVisible(true);
        }
    
        // ....
    }

    codice:
    public Login {
        private JFrame frame;
        private JTextField userText;
        // ....
    
        public Login() {
            frame = new JFrame("Login");
            // ... setup ...
            frame.setVisible(true);
        }
    
        // ....
    }

    A livello di risultato finale sono UGUALI. Cambia leggermente il design generale perché nel primo Login è-un JFrame e questa è una nozione pubblica per chiunque abbia accesso a Login, mentre nel secondo il JFrame è interno e nascosto (se non viene esposto all'esterno in qualche modo).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Un pò complicato... :| Che la nozione sia pubblica o meno cosa comporta?

    E se uso il frame puro che ho postato io poi come ne richiamo un'istanza tramite main?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Che la nozione sia pubblica o meno cosa comporta?
    Tecnicamente che nella prima variante chiunque abbia in mano o riceva un reference ad un oggetto Login, può farci tutto quello che JFrame di base offre, compreso es. (de)registrare listener, prendere il content pane ed aggiungere cose (o es. al contrario buttare via tutti i componenti) ecc...

    Nella seconda variante, invece non può fare nulla di particolare ... se non sei TU che "esponi" metodi pubblici per fare qualcosa di specifico.

    Differenze comunque che a te e in generale per piccoli esercizi o programmini o cose del genere, sono praticamente quasi indifferenti.

    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    E se uso il frame puro che ho postato io poi come ne richiamo un'istanza tramite main?
    Nelle due varianti indicate, ad esempio, il modo di avvio è esattamente lo stesso: fare un new Login()
    Non cambia nulla in questo senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.