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

    Richiamo di un jframe da un altro jframe

    mi sto facendo una piccola applicazione man mano che andiamo avanti col corso per esercizio.
    quello che vorrei fare è questo:

    * avvio il programma e mi compare una finestra con due pulsanti dove scelgo se sono uno studente o un lavoratore
    * a seconda di quello che scelgo mi compare un form da riempire.

    io per ora ho creato la prima finestra e quella per lo studente.
    ma il mio problema è che nn so come richiamare un altra finestra.
    ho creato un evento quando clicco sul mouse:
    codice:
        private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
            // TODO add your handling code here:
        }
    ma nn ho la più pallida idea di che istruzioni mettere per fare in modo che quando clicchi sul bottone di compaia l'altra finestra (public class FormS extends javax.swing.JFrame......).

    ps: se vi può essere utile uso netbeans.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Semplicemente, dovrai istanziare la classe che rappresenta l'altra finestra e, se non è già previsto dal costruttore, visualizzarla.

    Esempio:
    codice:
    // La tua classe principale
    class FramePrincipale extends JFrame {
       private FrameSecondario secondario;   // Un riferimento alla finestra secondaria
    
       ...
    
       // Il gestore del pulsante
       public void actionPerformed(ActionEvent ae) {
          secondario = new FrameSecondario( ... );
          secondario.setVisible( true );
       }
    }
    Il codice di esempio sopra presuppone queste cose:

    1) Che tu abbia una classe "FrameSecondario" che estende JFrame
    2) Il costruttore di "FrameSecondario" non richiama setVisible( true ) [anche se non sarebbe un errore]
    3) Il riferimento al frame secondario è visibile all'interno dell'ActionListener che si occupa di gestire il clic del pulsante

    Inoltre, nell'esempio, non si è tenuto conto di eventuali aperture doppie: se l'utente clicca più volte sul pulsante del frame principale, verranno aperte più finestre secondarie (e verrà perso il riferimento a quella aperta precedentemente).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    intanto grazie!!
    mi funziona tutto:
    codice:
    public class GestionePersoneView extends FrameView {
    
        private FormS forms;
    .....
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
            forms =new FormS();
            forms.setVisible(true);
            
        }
    vorrei fare in modo però che quando clicco su uno dei pulsanti (ad esempio studente), oltre ad aprirsi il frame corrispondente, la finestra principale si chiuda.
    ho trovato questi:
    public void windowClosed(WindowEvent e){}
    public void windowClosing(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}
    public void windowOpened(WindowEvent e){}

    solo che nn so come metterli nel jButton1MouseClicked.
    e a dirla tutta netbeans li chiama anche in modo diverso....

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Quei metodi non c'entrano niente: servono ad intercettare particolari eventi accaduti sulla finestra.

    Per chiudere una finestra si usa il metodo dispose().

    Quindi, nell'esempio che ho riportato prima:
    codice:
       // Il gestore del pulsante
       public void actionPerformed(ActionEvent ae) {
          secondario = new FrameSecondario( ... );
          secondario.setVisible( true );
    
          // Supponendo che "frmPrincipale" sia un riferimento al frame principale
          frmPrincipale.dispose();
       }
    Nota che frmPrincipale deve essere un riferimento al JFrame principale, visibile all'ActionListener (potrebbe, quindi, essere anche semplicemente this, se l'ActionListener responsabile dell'intercettazione dell'evento sul pulsante è il frame stesso).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    vorrei fare in modo però che quando clicco su uno dei pulsanti (ad esempio studente), oltre ad aprirsi il frame corrispondente, la finestra principale si chiuda.
    Questo lo fai semplicemente tu: tuaFinestraPrincipale.setVisible(false);

    Originariamente inviato da fermat
    ho trovato questi:
    public void windowClosed(WindowEvent e){}
    public void windowClosing(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}
    public void windowOpened(WindowEvent e){}

    solo che nn so come metterli nel jButton1MouseClicked.
    Infatti non centrano nulla con un "mouse clicked". Devi implementare WindowListener (eventualmente estendendo WindowAdapter).

    Originariamente inviato da fermat
    e a dirla tutta netbeans li chiama anche in modo diverso....
    Perché gli IDE fanno così ... ti permettono di fare tutto "velocemente" ma poi generano loro il codice, con le loro convenzioni. Codice che spesso/generalmente è prolisso e pure poco comprensibile (nonché manutenibile meno facilmente).

    I metodi dei listener sono quelli che hai indicato sopra, e li trovi nella documentazione javadoc. Che poi l'IDE abbia le sue convenzioni per cui ti implementa la interfaccia e per ogni metodo del listener va a creare un metodo "privato", che invoca, con nome più astruso del tipo jButton1MouseClicked .... beh, è un altro discorso. Ma sarebbe di più e superfluo.

    Io generalmente cerco di pensare in termini di AWT/Swing ... non di cosa fa o mi richiede un IDE.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    per ora nn sono riuscito nell'intento di chiudere la finestra.
    il fatto è che le finestre (quella principale e quella richiamata che può essere rivolta allo studente o al lavoratore) sono collegate: ne chiudi una e si chiudono tutte.
    mi hanno detto il corso che separarle in modo da renderle indipendenti.
    solo che ho provato a fare qualcosa in quest'ultima ora ma nn ho capito molto bene che devo fare.
    potete illuminarmi??

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da fermat
    il fatto è che le finestre (quella principale e quella richiamata che può essere rivolta allo studente o al lavoratore) sono collegate: ne chiudi una e si chiudono tutte.
    Che vuol dire?
    Tu dovrai obbligatoriamente avere due oggetti: uno è la finestra principale e l'altro la finestra secondaria.

    Il metodo dispose() ( o setVisible(false) ) lo dovrai richiamare su uno dei due.

    Chiamarlo su un oggetto non comporta la chiusura anche dell'altro: se accade questo, significa che sei tu a farlo, in qualche modo.

    E senza vedere il codice, diventa impossibile darti una mano.

    PS: se decidi di postare il codice, usa gli appositi tag CODE (e non, come hai fatto in precedenza, i tag QUOTE, che servono per altri scopi).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Come detto andbin una volta implementata WindowListener ed i metodi, ti basta inserire in windowClosing(WindowEvent we) il codice per chiudere il frame..

    Io ho fatto una cosa simile poco tempo fa, e ho semplicemente passato ad ogni classe che va ad estendere JFrame l'oggetto della classe "padre" (della classe dove avviene l'evento, come il premere un pulsante).

    codice:
    addWindowListener(new WindowListener() {
      public void windowClosing(WindowEvent we) {
        classeGen.setVisible(true);
        dispose();
      }
    
      public void windowDeactivated(WindowEvent we) {}
      public void windowActivated(WindowEvent we) {}
      public void windowDeiconified(WindowEvent we) {}
      public void windowIconified(WindowEvent we) {}
      public void windowClosed(WindowEvent we) {}
      public void windowOpened(WindowEvent we) {}
    });
    classeGen è un riferimento della classe che contiene un pulsante, o comunque della classe che chiama quest'altra classe e fa apparire il frame.

    In sostanza dispose() è il metodo che chiude questo frame (magari ci sono modi migliori, però così mi funziona )

    PS: lele mi ha anticipato :P

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    per ora nn sono riuscito nell'intento di chiudere la finestra.
    Ma la questione della chiusura è banale, se si "sa" cosa succede e a seguito di cosa!

    Se la chiusura la vuoi fare a seguito di un qualunque evento, da un pulsante, menù o altro di specifico che hai scelto tu non vedo problemi, basta usare setVisible(false) o dispose() (rilascia anche risorse "native" della finestra). Non c'è nulla di particolare o strano.

    Se invece vuoi trattare la chiusura dalla X della finestra, questo è un modo "standard" ed esiste la proprietà che indica il "default close operation", vedi get/setDefaultCloseOperation.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    bho sarà banale ma nn riesco a capire .
    allora, questo è il frame principale che parte all'avvio del programma:
    codice:
    public class GestionePersoneView extends FrameView {
    
        private FormS forms;
        private FormL forml;
    
        public GestionePersoneView(SingleFrameApplication app) {
            super(app);
    
            initComponents();
    .....
        private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
            forms=new FormS();
            forms.setVisible(true);
        }                                     
    
        private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {                                      
            forml=new FormL();
            forml.setVisible(true);
        }         
    ......
    quando si clicca su uno dei due pulsanti questo frame si deve chiudere.
    quello che nn riesco a capire è cos'è che devo richiamare per fare in modo che si chiuda e dove dovrei scriverlo .

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.